Skip to content

Commit 30d537f

Browse files
27rabbitltkdave
authored andcommitted
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 <wqu@suse.com> Signed-off-by: Teng Liu <27rabbitlt@gmail.com> Signed-off-by: David Sterba <dsterba@suse.com>
1 parent f0d3b4c commit 30d537f

1 file changed

Lines changed: 7 additions & 1 deletion

File tree

fs/btrfs/block-group.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3381,7 +3381,13 @@ static void cache_save_setup(struct btrfs_block_group *block_group,
33813381
}
33823382

33833383
if (IS_ERR(inode)) {
3384-
BUG_ON(retries);
3384+
if (retries) {
3385+
ret = PTR_ERR(inode);
3386+
btrfs_err(fs_info,
3387+
"failed to lookup free space inode after creation for block group %llu: %d",
3388+
block_group->start, ret);
3389+
goto out_free;
3390+
}
33853391
retries++;
33863392

33873393
if (block_group->ro)

0 commit comments

Comments
 (0)