ext4: fix removing status extents in ext4_collapse_range()
authorLukas Czerner <lczerner@redhat.com>
Fri, 18 Apr 2014 14:43:21 +0000 (10:43 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 18 Apr 2014 14:43:21 +0000 (10:43 -0400)
Currently in ext4_collapse_range() when calling ext4_es_remove_extent() to
remove status extents we're passing (EXT_MAX_BLOCKS - punch_start - 1)
in order to remove all extents from start of the collapse range to the
end of the file. However this is wrong because we might miss the
possible extent covering the last block of the file.

Fix it by removing the -1.

Signed-off-by: Lukas Czerner <lczerner@redhat.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Reviewed-by: Namjae Jeon <namjae.jeon@samsung.com>
fs/ext4/extents.c

index f4a676908b0b60be5642fe015943d20545df5e08..c6f624582d37ed1d55fcbd2e8afbf1b04141e1e1 100644 (file)
@@ -5454,7 +5454,7 @@ int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len)
        ext4_discard_preallocations(inode);
 
        ret = ext4_es_remove_extent(inode, punch_start,
-                                   EXT_MAX_BLOCKS - punch_start - 1);
+                                   EXT_MAX_BLOCKS - punch_start);
        if (ret) {
                up_write(&EXT4_I(inode)->i_data_sem);
                goto out_stop;