| From 550f133f6959db927127111b50e483da3a7ce662 Mon Sep 17 00:00:00 2001 |
| From: Qu Wenruo <wqu@suse.com> |
| Date: Fri, 28 Jan 2022 15:21:22 +0800 |
| Subject: btrfs: defrag: remove an ambiguous condition for rejection |
| |
| From: Qu Wenruo <wqu@suse.com> |
| |
| commit 550f133f6959db927127111b50e483da3a7ce662 upstream. |
| |
| From the very beginning of btrfs defrag, there is a check to reject |
| extents which meet both conditions: |
| |
| - Physically adjacent |
| |
| We may want to defrag physically adjacent extents to reduce the number |
| of extents or the size of subvolume tree. |
| |
| - Larger than 128K |
| |
| This may be there for compressed extents, but unfortunately 128K is |
| exactly the max capacity for compressed extents. |
| And the check is > 128K, thus it never rejects compressed extents. |
| |
| Furthermore, the compressed extent capacity bug is fixed by previous |
| patch, there is no reason for that check anymore. |
| |
| The original check has a very small ranges to reject (the target extent |
| size is > 128K, and default extent threshold is 256K), and for |
| compressed extent it doesn't work at all. |
| |
| So it's better just to remove the rejection, and allow us to defrag |
| physically adjacent extents. |
| |
| CC: stable@vger.kernel.org # 5.16 |
| Reviewed-by: Filipe Manana <fdmanana@suse.com> |
| Signed-off-by: Qu Wenruo <wqu@suse.com> |
| Signed-off-by: David Sterba <dsterba@suse.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| fs/btrfs/ioctl.c | 4 ---- |
| 1 file changed, 4 deletions(-) |
| |
| --- a/fs/btrfs/ioctl.c |
| +++ b/fs/btrfs/ioctl.c |
| @@ -1049,10 +1049,6 @@ static bool defrag_check_next_extent(str |
| */ |
| if (next->len >= get_extent_max_capacity(em)) |
| goto out; |
| - /* Physically adjacent and large enough */ |
| - if ((em->block_start + em->block_len == next->block_start) && |
| - (em->block_len > SZ_128K && next->block_len > SZ_128K)) |
| - goto out; |
| ret = true; |
| out: |
| free_extent_map(next); |