From: Teng Liu <27rabbitlt@gmail.com> Date: Sat, 28 Mar 2026 06:40:59 +0000 (+0100) Subject: btrfs: replace BUG_ON() with error return in cache_save_setup() X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=30d537f723d6f37a8ddfb17fe668bb9808f5b49f;p=thirdparty%2Fkernel%2Flinux.git btrfs: replace BUG_ON() with error return in cache_save_setup() 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 Signed-off-by: Teng Liu <27rabbitlt@gmail.com> Signed-off-by: David Sterba --- diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index fa6e49a4ba37d..e6f5a17a13e36 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -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)