Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1395542 > unrolled thread
| Started by | Toshi Kani <toshi.kani@hpe.com> |
|---|---|
| First post | 2016-05-06 02:40 +0200 |
| Last post | 2016-05-09 20:30 +0200 |
| Articles | 8 — 4 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH v3 2/5] block: Add bdev_supports_dax() for dax mount checks Toshi Kani <toshi.kani@hpe.com> - 2016-05-06 02:40 +0200
Re: [PATCH v3 2/5] block: Add bdev_supports_dax() for dax mount checks Christoph Hellwig <hch@infradead.org> - 2016-05-08 11:00 +0200
Re: [PATCH v3 2/5] block: Add bdev_supports_dax() for dax mount checks Dan Williams <dan.j.williams@intel.com> - 2016-05-08 21:20 +0200
Re: [PATCH v3 2/5] block: Add bdev_supports_dax() for dax mount checks Dan Williams <dan.j.williams@intel.com> - 2016-05-09 20:30 +0200
Re: [PATCH v3 2/5] block: Add bdev_supports_dax() for dax mount checks Dave Chinner <david@fromorbit.com> - 2016-05-09 23:20 +0200
Re: [PATCH v3 2/5] block: Add bdev_supports_dax() for dax mount checks Toshi Kani <toshi.kani@hpe.com> - 2016-05-10 00:50 +0200
Re: [PATCH v3 2/5] block: Add bdev_supports_dax() for dax mount checks Toshi Kani <toshi.kani@hpe.com> - 2016-05-10 01:10 +0200
Re: [PATCH v3 2/5] block: Add bdev_supports_dax() for dax mount checks Toshi Kani <toshi.kani@hpe.com> - 2016-05-09 20:30 +0200
| From | Toshi Kani <toshi.kani@hpe.com> |
|---|---|
| Date | 2016-05-06 02:40 +0200 |
| Subject | [PATCH v3 2/5] block: Add bdev_supports_dax() for dax mount checks |
| Message-ID | <rvBYf-2li-57@gated-at.bofh.it> |
DAX imposes additional requirements to a device. Add
bdev_supports_dax() which performs all the precondition checks
necessary for filesystem to mount the device with dax option.
Also add a new check to verify if a partition is aligned by 4KB.
When a partition is unaligned, any dax read/write access fails,
except for metadata update.
Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: Jens Axboe <axboe@fb.com>
Cc: "Theodore Ts'o" <tytso@mit.edu>
Cc: Andreas Dilger <adilger.kernel@dilger.ca>
Cc: Jan Kara <jack@suse.cz>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Boaz Harrosh <boaz@plexistor.com>
---
fs/block_dev.c | 42 ++++++++++++++++++++++++++++++++++++++++++
include/linux/blkdev.h | 1 +
2 files changed, 43 insertions(+)
diff --git a/fs/block_dev.c b/fs/block_dev.c
index 7be17c4..e51a2c3 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -509,6 +509,48 @@ long bdev_direct_access(struct block_device *bdev, struct blk_dax_ctl *dax)
}
EXPORT_SYMBOL_GPL(bdev_direct_access);
+/**
+ * bdev_supports_dax() - Check if the block device supports DAX
+ * @sb: The superblock of the device
+ * @blocksize: The block size of the device
+ *
+ * Return: negative errno if unsupported, 0 if supported.
+ */
+int bdev_supports_dax(struct super_block *sb, int blocksize)
+{
+ struct blk_dax_ctl dax = {
+ .sector = 0,
+ .size = PAGE_SIZE,
+ };
+ int err;
+
+ if (blocksize != PAGE_SIZE) {
+ vfs_msg(sb, KERN_ERR, "error: unsupported blocksize for dax");
+ return -EINVAL;
+ }
+
+ err = bdev_direct_access(sb->s_bdev, &dax);
+ if (err < 0) {
+ switch (err) {
+ case -EOPNOTSUPP:
+ vfs_msg(sb, KERN_ERR,
+ "error: device does not support dax");
+ break;
+ case -EINVAL:
+ vfs_msg(sb, KERN_ERR,
+ "error: unaligned partition for dax");
+ break;
+ default:
+ vfs_msg(sb, KERN_ERR,
+ "error: dax access failed (%d)", err);
+ }
+ return err;
+ }
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(bdev_supports_dax);
+
/*
* pseudo-fs
*/
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 78c48ab..6a792aa 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -1688,6 +1688,7 @@ extern int bdev_read_page(struct block_device *, sector_t, struct page *);
extern int bdev_write_page(struct block_device *, sector_t, struct page *,
struct writeback_control *);
extern long bdev_direct_access(struct block_device *, struct blk_dax_ctl *);
+extern int bdev_supports_dax(struct super_block *, int);
#else /* CONFIG_BLOCK */
struct block_device;
[toc] | [next] | [standalone]
| From | Christoph Hellwig <hch@infradead.org> |
|---|---|
| Date | 2016-05-08 11:00 +0200 |
| Subject | Re: [PATCH v3 2/5] block: Add bdev_supports_dax() for dax mount checks |
| Message-ID | <rwsJc-3ub-5@gated-at.bofh.it> |
| In reply to | #1395542 |
Looks fine, Reviewed-by: Christoph Hellwig <hch@lst.de>
[toc] | [prev] | [next] | [standalone]
| From | Dan Williams <dan.j.williams@intel.com> |
|---|---|
| Date | 2016-05-08 21:20 +0200 |
| Message-ID | <rwCpb-4eI-9@gated-at.bofh.it> |
| In reply to | #1395542 |
On Thu, May 5, 2016 at 5:29 PM, Toshi Kani <toshi.kani@hpe.com> wrote:
> DAX imposes additional requirements to a device. Add
> bdev_supports_dax() which performs all the precondition checks
> necessary for filesystem to mount the device with dax option.
>
> Also add a new check to verify if a partition is aligned by 4KB.
> When a partition is unaligned, any dax read/write access fails,
> except for metadata update.
>
> Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
> Cc: Alexander Viro <viro@zeniv.linux.org.uk>
> Cc: Jens Axboe <axboe@fb.com>
> Cc: "Theodore Ts'o" <tytso@mit.edu>
> Cc: Andreas Dilger <adilger.kernel@dilger.ca>
> Cc: Jan Kara <jack@suse.cz>
> Cc: Dave Chinner <david@fromorbit.com>
> Cc: Dan Williams <dan.j.williams@intel.com>
> Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
> Cc: Christoph Hellwig <hch@infradead.org>
> Cc: Boaz Harrosh <boaz@plexistor.com>
> ---
> fs/block_dev.c | 42 ++++++++++++++++++++++++++++++++++++++++++
> include/linux/blkdev.h | 1 +
> 2 files changed, 43 insertions(+)
>
> diff --git a/fs/block_dev.c b/fs/block_dev.c
> index 7be17c4..e51a2c3 100644
> --- a/fs/block_dev.c
> +++ b/fs/block_dev.c
> @@ -509,6 +509,48 @@ long bdev_direct_access(struct block_device *bdev, struct blk_dax_ctl *dax)
> }
> EXPORT_SYMBOL_GPL(bdev_direct_access);
>
> +/**
> + * bdev_supports_dax() - Check if the block device supports DAX
> + * @sb: The superblock of the device
> + * @blocksize: The block size of the device
> + *
> + * Return: negative errno if unsupported, 0 if supported.
> + */
> +int bdev_supports_dax(struct super_block *sb, int blocksize)
> +{
> + struct blk_dax_ctl dax = {
> + .sector = 0,
> + .size = PAGE_SIZE,
> + };
> + int err;
> +
> + if (blocksize != PAGE_SIZE) {
> + vfs_msg(sb, KERN_ERR, "error: unsupported blocksize for dax");
> + return -EINVAL;
> + }
> +
> + err = bdev_direct_access(sb->s_bdev, &dax);
> + if (err < 0) {
> + switch (err) {
> + case -EOPNOTSUPP:
> + vfs_msg(sb, KERN_ERR,
> + "error: device does not support dax");
> + break;
> + case -EINVAL:
> + vfs_msg(sb, KERN_ERR,
> + "error: unaligned partition for dax");
> + break;
> + default:
> + vfs_msg(sb, KERN_ERR,
> + "error: dax access failed (%d)", err);
> + }
> + return err;
> + }
> +
> + return 0;
> +}
> +EXPORT_SYMBOL_GPL(bdev_supports_dax);
This patch should replace blkdev_dax_capable(), or just reuse that
existing routine, or am I missing something?
[toc] | [prev] | [next] | [standalone]
| From | Dan Williams <dan.j.williams@intel.com> |
|---|---|
| Date | 2016-05-09 20:30 +0200 |
| Message-ID | <rwY6l-2x2-1@gated-at.bofh.it> |
| In reply to | #1396474 |
On Mon, May 9, 2016 at 11:12 AM, Toshi Kani <toshi.kani@hpe.com> wrote:
> On Sun, 2016-05-08 at 12:14 -0700, Dan Williams wrote:
>> On Thu, May 5, 2016 at 5:29 PM, Toshi Kani <toshi.kani@hpe.com> wrote:
> :
>> > +int bdev_supports_dax(struct super_block *sb, int blocksize)
>> > +{
>> > + struct blk_dax_ctl dax = {
>> > + .sector = 0,
>> > + .size = PAGE_SIZE,
>> > + };
>> > + int err;
>> > +
>> > + if (blocksize != PAGE_SIZE) {
>> > + vfs_msg(sb, KERN_ERR, "error: unsupported blocksize for
>> > dax");
>> > + return -EINVAL;
>> > + }
>> > +
>> > + err = bdev_direct_access(sb->s_bdev, &dax);
>> > + if (err < 0) {
>> > + switch (err) {
>> > + case -EOPNOTSUPP:
>> > + vfs_msg(sb, KERN_ERR,
>> > + "error: device does not support dax");
>> > + break;
>> > + case -EINVAL:
>> > + vfs_msg(sb, KERN_ERR,
>> > + "error: unaligned partition for dax");
>> > + break;
>> > + default:
>> > + vfs_msg(sb, KERN_ERR,
>> > + "error: dax access failed (%d)", err);
>> > + }
>> > + return err;
>> > + }
>> > +
>> > + return 0;
>> > +}
>> > +EXPORT_SYMBOL_GPL(bdev_supports_dax);
>>
>> This patch should replace blkdev_dax_capable(), or just reuse that
>> existing routine, or am I missing something?
>
> Good question. bdev_supports_dax() is a helper function tailored for the
> filesystem's mount -o dax case. While blkdev_dax_capable() is similar, it
> does not need error messages like "device does not support dax" since it
> implicitly enables dax when capable. So, I think we can keep
> blkdev_dax_capable(), but change it to call bdev_direct_access() so that
> actual check is performed in a single place.
Sounds good to me.
[toc] | [prev] | [next] | [standalone]
| From | Dave Chinner <david@fromorbit.com> |
|---|---|
| Date | 2016-05-09 23:20 +0200 |
| Subject | Re: [PATCH v3 2/5] block: Add bdev_supports_dax() for dax mount checks |
| Message-ID | <rx0KT-5bF-11@gated-at.bofh.it> |
| In reply to | #1397250 |
On Mon, May 09, 2016 at 11:23:03AM -0700, Dan Williams wrote:
> On Mon, May 9, 2016 at 11:12 AM, Toshi Kani <toshi.kani@hpe.com> wrote:
> > On Sun, 2016-05-08 at 12:14 -0700, Dan Williams wrote:
> >> On Thu, May 5, 2016 at 5:29 PM, Toshi Kani <toshi.kani@hpe.com> wrote:
> > :
> >> > +int bdev_supports_dax(struct super_block *sb, int blocksize)
> >> > +{
> >> > + struct blk_dax_ctl dax = {
> >> > + .sector = 0,
> >> > + .size = PAGE_SIZE,
> >> > + };
> >> > + int err;
> >> > +
> >> > + if (blocksize != PAGE_SIZE) {
> >> > + vfs_msg(sb, KERN_ERR, "error: unsupported blocksize for
> >> > dax");
> >> > + return -EINVAL;
> >> > + }
> >> > +
> >> > + err = bdev_direct_access(sb->s_bdev, &dax);
> >> > + if (err < 0) {
> >> > + switch (err) {
> >> > + case -EOPNOTSUPP:
> >> > + vfs_msg(sb, KERN_ERR,
> >> > + "error: device does not support dax");
> >> > + break;
> >> > + case -EINVAL:
> >> > + vfs_msg(sb, KERN_ERR,
> >> > + "error: unaligned partition for dax");
> >> > + break;
> >> > + default:
> >> > + vfs_msg(sb, KERN_ERR,
> >> > + "error: dax access failed (%d)", err);
> >> > + }
> >> > + return err;
> >> > + }
> >> > +
> >> > + return 0;
> >> > +}
> >> > +EXPORT_SYMBOL_GPL(bdev_supports_dax);
> >>
> >> This patch should replace blkdev_dax_capable(), or just reuse that
> >> existing routine, or am I missing something?
> >
> > Good question. bdev_supports_dax() is a helper function tailored for the
> > filesystem's mount -o dax case. While blkdev_dax_capable() is similar, it
> > does not need error messages like "device does not support dax" since it
> > implicitly enables dax when capable. So, I think we can keep
> > blkdev_dax_capable(), but change it to call bdev_direct_access() so that
> > actual check is performed in a single place.
>
> Sounds good to me.
Can you name them consistently then? i.e. blkdev_dax_supported() and
blkdev_dax_capable()?
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
[toc] | [prev] | [next] | [standalone]
| From | Toshi Kani <toshi.kani@hpe.com> |
|---|---|
| Date | 2016-05-10 00:50 +0200 |
| Subject | Re: [PATCH v3 2/5] block: Add bdev_supports_dax() for dax mount checks |
| Message-ID | <rx29X-6uv-1@gated-at.bofh.it> |
| In reply to | #1397404 |
On Tue, 2016-05-10 at 07:19 +1000, Dave Chinner wrote: > On Mon, May 09, 2016 at 11:23:03AM -0700, Dan Williams wrote: > > > > On Mon, May 9, 2016 at 11:12 AM, Toshi Kani <toshi.kani@hpe.com> wrote: > > > > > > On Sun, 2016-05-08 at 12:14 -0700, Dan Williams wrote: > > > > > > > > On Thu, May 5, 2016 at 5:29 PM, Toshi Kani <toshi.kani@hpe.com> > > > > wrote: : > > > > This patch should replace blkdev_dax_capable(), or just reuse that > > > > existing routine, or am I missing something? > > > > > > Good question. bdev_supports_dax() is a helper function tailored for > > > the filesystem's mount -o dax case. While blkdev_dax_capable() is > > > similar, it does not need error messages like "device does not > > > support dax" since it implicitly enables dax when capable. So, I > > > think we can keep blkdev_dax_capable(), but change it to call > > > bdev_direct_access() so that actual check is performed in a single > > > place. > > > > Sounds good to me. > > Can you name them consistently then? i.e. blkdev_dax_supported() and > blkdev_dax_capable()? Sure. Will do. Thanks, -Toshi
[toc] | [prev] | [next] | [standalone]
| From | Toshi Kani <toshi.kani@hpe.com> |
|---|---|
| Date | 2016-05-10 01:10 +0200 |
| Subject | Re: [PATCH v3 2/5] block: Add bdev_supports_dax() for dax mount checks |
| Message-ID | <rx2tk-76w-17@gated-at.bofh.it> |
| In reply to | #1397487 |
On Mon, 2016-05-09 at 16:34 -0600, Toshi Kani wrote: > On Tue, 2016-05-10 at 07:19 +1000, Dave Chinner wrote: : > > > > > > > > > > This patch should replace blkdev_dax_capable(), or just reuse > > > > > that existing routine, or am I missing something? > > > > > > > > Good question. bdev_supports_dax() is a helper function tailored > > > > for the filesystem's mount -o dax case. While blkdev_dax_capable() > > > > is similar, it does not need error messages like "device does not > > > > support dax" since it implicitly enables dax when capable. So, I > > > > think we can keep blkdev_dax_capable(), but change it to call > > > > bdev_direct_access() so that actual check is performed in a single > > > > place. > > > > > > Sounds good to me. > > > > Can you name them consistently then? i.e. blkdev_dax_supported() and > > blkdev_dax_capable()? > > Sure. Will do. I will keep the "bdev_" prefix to be consistent with bdev_direct_access(), i.e. bdev_dax_supported() and bdev_dax_capable(). -Toshi
[toc] | [prev] | [next] | [standalone]
| From | Toshi Kani <toshi.kani@hpe.com> |
|---|---|
| Date | 2016-05-09 20:30 +0200 |
| Subject | Re: [PATCH v3 2/5] block: Add bdev_supports_dax() for dax mount checks |
| Message-ID | <rwY6l-2x2-3@gated-at.bofh.it> |
| In reply to | #1396474 |
On Sun, 2016-05-08 at 12:14 -0700, Dan Williams wrote:
> On Thu, May 5, 2016 at 5:29 PM, Toshi Kani <toshi.kani@hpe.com> wrote:
:
> > +int bdev_supports_dax(struct super_block *sb, int blocksize)
> > +{
> > + struct blk_dax_ctl dax = {
> > + .sector = 0,
> > + .size = PAGE_SIZE,
> > + };
> > + int err;
> > +
> > + if (blocksize != PAGE_SIZE) {
> > + vfs_msg(sb, KERN_ERR, "error: unsupported blocksize for
> > dax");
> > + return -EINVAL;
> > + }
> > +
> > + err = bdev_direct_access(sb->s_bdev, &dax);
> > + if (err < 0) {
> > + switch (err) {
> > + case -EOPNOTSUPP:
> > + vfs_msg(sb, KERN_ERR,
> > + "error: device does not support dax");
> > + break;
> > + case -EINVAL:
> > + vfs_msg(sb, KERN_ERR,
> > + "error: unaligned partition for dax");
> > + break;
> > + default:
> > + vfs_msg(sb, KERN_ERR,
> > + "error: dax access failed (%d)", err);
> > + }
> > + return err;
> > + }
> > +
> > + return 0;
> > +}
> > +EXPORT_SYMBOL_GPL(bdev_supports_dax);
>
> This patch should replace blkdev_dax_capable(), or just reuse that
> existing routine, or am I missing something?
Good question. bdev_supports_dax() is a helper function tailored for the
filesystem's mount -o dax case. While blkdev_dax_capable() is similar, it
does not need error messages like "device does not support dax" since it
implicitly enables dax when capable. So, I think we can keep
blkdev_dax_capable(), but change it to call bdev_direct_access() so that
actual check is performed in a single place.
Thanks,
-Toshi
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web