ext2: use iomap_zero_range() for zeroing truncated page in DAX path
authorJan Kara <jack@suse.cz>
Mon, 21 Nov 2016 01:47:07 +0000 (20:47 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 21 Nov 2016 01:47:07 +0000 (20:47 -0500)
Currently the last user of ext2_get_blocks() for DAX inodes was
dax_truncate_page(). Convert that to iomap_zero_range() so that all DAX
IO uses the iomap path.

Reviewed-by: Ross Zwisler <ross.zwisler@linux.intel.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext2/inode.c

index 41b8b44a391cb5dc8ed833cb95b632424372e038..046b642f358592b995f831cdf1fcf5cd61ec95db 100644 (file)
@@ -850,6 +850,9 @@ struct iomap_ops ext2_iomap_ops = {
        .iomap_begin            = ext2_iomap_begin,
        .iomap_end              = ext2_iomap_end,
 };
+#else
+/* Define empty ops for !CONFIG_FS_DAX case to avoid ugly ifdefs */
+struct iomap_ops ext2_iomap_ops;
 #endif /* CONFIG_FS_DAX */
 
 int ext2_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
@@ -1293,9 +1296,11 @@ static int ext2_setsize(struct inode *inode, loff_t newsize)
 
        inode_dio_wait(inode);
 
-       if (IS_DAX(inode))
-               error = dax_truncate_page(inode, newsize, ext2_get_block);
-       else if (test_opt(inode->i_sb, NOBH))
+       if (IS_DAX(inode)) {
+               error = iomap_zero_range(inode, newsize,
+                                        PAGE_ALIGN(newsize) - newsize, NULL,
+                                        &ext2_iomap_ops);
+       } else if (test_opt(inode->i_sb, NOBH))
                error = nobh_truncate_page(inode->i_mapping,
                                newsize, ext2_get_block);
        else