From: Li Zefan <lizf@cn.fujitsu.com>
Date: Fri, 2 Sep 2011 07:56:55 +0000 (+0800)
Subject: Btrfs: fix wrong max_to_defrag in btrfs_defrag_file()
X-Git-Tag: firefly_0821_release~3680^2~3894^2~77^2~14
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=5ca496604b5975d371bb669ee6c2394bcbea818f;p=firefly-linux-kernel-4.4.55.git

Btrfs: fix wrong max_to_defrag in btrfs_defrag_file()

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>
---

diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index 323d77f09258..f9026413bcf1 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -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) {
 		/*