]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
btrfs: fix wrong min_objectid in btrfs_previous_item() call
authorrobbieko <robbieko@synology.com>
Mon, 13 Apr 2026 06:52:34 +0000 (14:52 +0800)
committerDavid Sterba <dsterba@suse.com>
Tue, 21 Apr 2026 02:02:26 +0000 (04:02 +0200)
When found_start > start and slot == 0, btrfs_previous_item() is called
with min_objectid=start to find the previous stripe extent. However, the
previous stripe extent we are looking for has objectid < start (it starts
before our deletion range), so passing start as min_objectid prevents
finding it.

Fix by passing 0 as min_objectid to allow finding any preceding stripe
extent regardless of its objectid.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: robbieko <robbieko@synology.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/raid-stripe-tree.c

index 4937b08da9deacf92cf23720a0b9f5abb74810f3..1a0ea21076886e3e77787db70757f69fbb38dd08 100644 (file)
@@ -138,7 +138,7 @@ int btrfs_delete_raid_extent(struct btrfs_trans_handle *trans, u64 start, u64 le
                 */
                if (found_start > start) {
                        if (slot == 0) {
-                               ret = btrfs_previous_item(stripe_root, path, start,
+                               ret = btrfs_previous_item(stripe_root, path, 0,
                                                          BTRFS_RAID_STRIPE_KEY);
                                if (ret) {
                                        if (ret > 0)