Btrfs: fix wrong max_to_defrag in btrfs_defrag_file()
authorLi Zefan <lizf@cn.fujitsu.com>
Fri, 2 Sep 2011 07:56:55 +0000 (15:56 +0800)
committerDavid Sterba <dsterba@suse.cz>
Thu, 20 Oct 2011 16:10:37 +0000 (18:10 +0200)
It's off-by-one, and thus we may skip the last page while defragmenting.

An example case:

  # create /mnt/file with 2 4K file extents
  # btrfs fi defrag /mnt/file
  # sync
  # filefrag /mnt/file
  /mnt/file: 2 extents found

So it's not defragmented.

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
fs/btrfs/ioctl.c

index 323d77f09258d50b8fb9692aa7d9f00bff1656f4..f9026413bcf1e9c6bc0ca130455ec0c0853143e4 100644 (file)
@@ -1052,7 +1052,7 @@ int btrfs_defrag_file(struct inode *inode, struct file *file,
                i = range->start >> PAGE_CACHE_SHIFT;
        }
        if (!max_to_defrag)
-               max_to_defrag = last_index - 1;
+               max_to_defrag = last_index;
 
        while (i <= last_index && defrag_count < max_to_defrag) {
                /*