From 5ce800cb29dd552964385364d8e695e1999ea65b Mon Sep 17 00:00:00 2001 From: Haisu Wang Date: Wed, 26 Feb 2025 22:49:14 +0900 Subject: [PATCH] btrfs: fix the length of reserved qgroup to free BugLink: https://bugs.launchpad.net/bugs/2100292 commit 2b084d8205949dd804e279df8e68531da78be1e8 upstream. The dealloc flag may be cleared and the extent won't reach the disk in cow_file_range when errors path. The reserved qgroup space is freed in commit 30479f31d44d ("btrfs: fix qgroup reserve leaks in cow_file_range"). However, the length of untouched region to free needs to be adjusted with the correct remaining region size. Fixes: 30479f31d44d ("btrfs: fix qgroup reserve leaks in cow_file_range") CC: stable@vger.kernel.org # 6.11+ Reviewed-by: Qu Wenruo Reviewed-by: Boris Burkov Signed-off-by: Haisu Wang Reviewed-by: David Sterba Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman [koichiroden: adjusted conotext due to missing commit: 4cf7e0562f5f ("btrfs: convert cow_file_range() to take a folio")] Signed-off-by: Koichiro Den Signed-off-by: Stefan Bader --- fs/btrfs/inode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index a2d70163c1a0..cf7a34fcb1a7 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -1570,7 +1570,7 @@ out_unlock: clear_bits |= EXTENT_CLEAR_DATA_RESV; extent_clear_unlock_delalloc(inode, start, end, locked_page, clear_bits, page_ops); - btrfs_qgroup_free_data(inode, NULL, start, cur_alloc_size, NULL); + btrfs_qgroup_free_data(inode, NULL, start, end - start + 1, NULL); } return ret; }