]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
btrfs: read key again after incrementing slot in move_existing_remaps()
authorMark Harmstone <mark@harmstone.com>
Wed, 25 Feb 2026 10:36:06 +0000 (10:36 +0000)
committerDavid Sterba <dsterba@suse.com>
Tue, 3 Mar 2026 16:03:59 +0000 (17:03 +0100)
Fix move_existing_remaps() so that if we increment the slot because the
key we encounter isn't a REMAP_BACKREF, we don't reuse the objectid and
offset of the old item.

Link: https://lore.kernel.org/linux-btrfs/20260125123908.2096548-1-clm@meta.com/
Reported-by: Chris Mason <clm@fb.com>
Fixes: bbea42dfb91f ("btrfs: move existing remaps before relocating block group")
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Mark Harmstone <mark@harmstone.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/relocation.c

index cdb53c0b26ec9c5e2c9e0598a001766183d4b5d4..fcfbe1b1dab44e8b262680f5773faa158a311bc9 100644 (file)
@@ -4399,6 +4399,8 @@ static int move_existing_remaps(struct btrfs_fs_info *fs_info,
 
                                leaf = path->nodes[0];
                        }
+
+                       btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
                }
 
                remap = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_remap_item);