]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
btrfs: fix bytes_may_use leak in move_existing_remap()
authorMark Harmstone <mark@harmstone.com>
Mon, 23 Mar 2026 12:59:47 +0000 (12:59 +0000)
committerDavid Sterba <dsterba@suse.com>
Tue, 21 Apr 2026 02:00:32 +0000 (04:00 +0200)
If the call to btrfs_reserve_extent() in move_existing_remap() returns a
smaller extent than we asked for, currently we're not undoing the
bytes_may_use change that we made. Fix this by calling
btrfs_space_info_update_bytes_may_use() again for the difference.

Fixes: bbea42dfb91f ("btrfs: move existing remaps before relocating block group")
Reviewed-by: Boris Burkov <boris@bur.io>
Signed-off-by: Mark Harmstone <mark@harmstone.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/relocation.c

index 1c42c5180bddd508c97d018a720af9839a077884..3d1756b611624614ad0a7aeb646c51f3d252ecc6 100644 (file)
@@ -4174,6 +4174,12 @@ static int move_existing_remap(struct btrfs_fs_info *fs_info,
                return ret;
        }
 
+       if (ins.offset < length) {
+               spin_lock(&sinfo->lock);
+               btrfs_space_info_update_bytes_may_use(sinfo, ins.offset - length);
+               spin_unlock(&sinfo->lock);
+       }
+
        dest_addr = ins.objectid;
        dest_length = ins.offset;