On Thu, May 5, 2016 at 5:29 PM, Toshi Kani <toshi.kani@xxxxxxx> 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@xxxxxxx> > Cc: Alexander Viro <viro@xxxxxxxxxxxxxxxxxx> > Cc: Jens Axboe <axboe@xxxxxx> > Cc: "Theodore Ts'o" <tytso@xxxxxxx> > Cc: Andreas Dilger <adilger.kernel@xxxxxxxxx> > Cc: Jan Kara <jack@xxxxxxx> > Cc: Dave Chinner <david@xxxxxxxxxxxxx> > Cc: Dan Williams <dan.j.williams@xxxxxxxxx> > Cc: Ross Zwisler <ross.zwisler@xxxxxxxxxxxxxxx> > Cc: Christoph Hellwig <hch@xxxxxxxxxxxxx> > Cc: Boaz Harrosh <boaz@xxxxxxxxxxxxx> > --- > 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? -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html