]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
btrfs: replace BUG_ON() with error return in cache_save_setup()
authorTeng Liu <27rabbitlt@gmail.com>
Sat, 28 Mar 2026 06:40:59 +0000 (07:40 +0100)
committerDavid Sterba <dsterba@suse.com>
Tue, 7 Apr 2026 16:56:08 +0000 (18:56 +0200)
In cache_save_setup(), if create_free_space_inode() succeeds but the
subsequent lookup_free_space_inode() still fails on retry, the
BUG_ON(retries) will crash the kernel. This can happen due to I/O
errors or transient failures, not just programming bugs.

Replace the BUG_ON with proper error handling that returns the original
error code through the existing cleanup path. The callers already handle
this gracefully: disk_cache_state defaults to BTRFS_DC_ERROR, so the
space cache simply won't be written for that block group.

Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Teng Liu <27rabbitlt@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/block-group.c

index fa6e49a4ba37d7bf9389081a523dc9645f302eac..e6f5a17a13e369a9c5a96862e266e2bebba44e59 100644 (file)
@@ -3381,7 +3381,13 @@ again:
        }
 
        if (IS_ERR(inode)) {
-               BUG_ON(retries);
+               if (retries) {
+                       ret = PTR_ERR(inode);
+                       btrfs_err(fs_info,
+                                 "failed to lookup free space inode after creation for block group %llu: %d",
+                                 block_group->start, ret);
+                       goto out_free;
+               }
                retries++;
 
                if (block_group->ro)