On 05/01/2016 08:31 PM, Christoph Hellwig wrote: > On Fri, Apr 29, 2016 at 02:39:33PM -0600, Toshi Kani wrote: >> diff --git a/fs/ext4/super.c b/fs/ext4/super.c >> index 304c712..90a8670 100644 >> --- a/fs/ext4/super.c >> +++ b/fs/ext4/super.c >> @@ -3421,6 +3421,12 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) >> "error: unsupported blocksize for dax"); >> goto failed_mount; >> } >> + if (sb->s_bdev->bd_part->start_sect % (PAGE_SIZE / 512) || >> + sb->s_bdev->bd_part->nr_sects % (PAGE_SIZE / 512)) { >> + ext4_msg(sb, KERN_ERR, >> + "error: unaligned partition for dax"); >> + goto failed_mount; >> + } >> if (!sb->s_bdev->bd_disk->fops->direct_access) { >> ext4_msg(sb, KERN_ERR, >> "error: device does not support dax"); > > Factor your new checks and the ->direct_access into a new helper. It > should take the block device as file systems might have multiple > underlying devices. This already exists as part of bdev_direct_access() All the code needs to do is call bdev_direct_access() on sector ZERO and see if it is successful. If the alignment is broken it will fail. Infact the FS does not even need the second if (!...bd_disk->fops->direct_access) check either because it is also done inside bdev_direct_access(). The only check needed is calling bdev_direct_access() and the generic layer does all the checks needed already. Cheers Boaz -- 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