ext2: Fix block zeroing in ext2_get_blocks() for DAX
authorJan Kara <jack@suse.cz>
Mon, 16 May 2016 15:17:04 +0000 (17:17 +0200)
committerVishal Verma <vishal.l.verma@intel.com>
Tue, 17 May 2016 06:41:24 +0000 (00:41 -0600)
When zeroing allocated blocks for DAX, we accidentally zeroed only the
first allocated block instead of all of them. So far this problem is
hidden by the fact that page faults always need only a single block and
DAX write code zeroes blocks again. But the zeroing in DAX code is racy
and needs to be removed so fix the zeroing in ext2 to zero all allocated
blocks.

Reported-by: Ross Zwisler <ross.zwisler@linux.intel.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
fs/ext2/inode.c

index 6bd58e6ff038657f75b93857bad455ebdfedfa0f..038d0ed5f5656e70875d8584cbe174aeddb34ba0 100644 (file)
@@ -740,7 +740,7 @@ static int ext2_get_blocks(struct inode *inode,
                err = dax_clear_sectors(inode->i_sb->s_bdev,
                                le32_to_cpu(chain[depth-1].key) <<
                                (inode->i_blkbits - 9),
-                               1 << inode->i_blkbits);
+                               count << inode->i_blkbits);
                if (err) {
                        mutex_unlock(&ei->truncate_mutex);
                        goto cleanup;