btrfs: handle block group lookup error when it's being removed
authorDavid Sterba <dsterba@suse.com>
Sat, 20 Jan 2024 01:17:03 +0000 (02:17 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 4 Mar 2024 15:24:47 +0000 (16:24 +0100)
The unlikely case of lookup error in btrfs_remove_block_group() can be
handled properly, in its caller this would lead to a transaction abort.
We can't do anything else, a block group must have been loaded first.

Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/block-group.c

index 78cae9f9deca912932b59523d94c6f93e3dd3ffa..58f2e8951dbf2336311d7376c4f669d4cc0c8c6d 100644 (file)
@@ -1063,7 +1063,9 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
        bool remove_rsv = false;
 
        block_group = btrfs_lookup_block_group(fs_info, map->start);
-       BUG_ON(!block_group);
+       if (!block_group)
+               return -ENOENT;
+
        BUG_ON(!block_group->ro);
 
        trace_btrfs_remove_block_group(block_group);