Re: [PATCH v2 1/3] ext4: Add alignment check for DAX mount

From: Ross Zwisler
Date: Tue May 03 2016 - 10:43:58 EST


On Tue, May 03, 2016 at 11:00:21AM +0200, Jan Kara wrote:
> On Tue 03-05-16 01:44:10, Christoph Hellwig wrote:
> > Please come up with a version that doesn't require tons of boilerplate
> > code in every file system.
>
> Well, I was thinking about some helper as well but we could save ~4 lines
> with that and that didn't seem significant to me. Most of the lines is
> actually reporting appropriate mount error in dmesg and that is
> fs-dependent so it needs to stay in the filesystem... So what do you have
> in mind?

I guess if you wanted to reduce the code needed in each filesystem, you could
avoid having different error messages for each of the failure conditions, and
just print the error value. All the error cases caught by the current code are
unique, so we aren't losing any information. The resulting patch for ext4
would look like this:

@@ -3416,14 +3416,19 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
}

if (sbi->s_mount_opt & EXT4_MOUNT_DAX) {
+ struct blk_dax_ctl dax = {
+ .sector = 0,
+ .size = PAGE_SIZE,
+ };
if (blocksize != PAGE_SIZE) {
ext4_msg(sb, KERN_ERR,
"error: unsupported blocksize for dax");
goto failed_mount;
}
- if (!sb->s_bdev->bd_disk->fops->direct_access) {
+ err = bdev_direct_access(sb->s_bdev, &dax);
+ if (err < 0) {
ext4_msg(sb, KERN_ERR,
- "error: device does not support dax");
+ "error: dax access failed (%d)", err);
goto failed_mount;
}
}