Skip to content

Commit

Permalink
btrfs: Go readonly on tree errors in balance_level
Browse files Browse the repository at this point in the history
balace_level() seems to deal with missing tree nodes by BUG_ON(). Instead,
we can easily just set the file system readonly and bubble -EROFS back up
the stack.

Signed-off-by: Mark Fasheh <mfasheh@suse.com>
  • Loading branch information
Mark Fasheh authored and David Sterba committed Mar 22, 2012
1 parent b68dc2a commit 305a26a
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions fs/btrfs/ctree.c
Original file line number Diff line number Diff line change
Expand Up @@ -944,7 +944,12 @@ static noinline int balance_level(struct btrfs_trans_handle *trans,

/* promote the child to a root */
child = read_node_slot(root, mid, 0);
BUG_ON(!child);
if (!child) {
ret = -EROFS;
btrfs_std_error(root->fs_info, ret);
goto enospc;
}

btrfs_tree_lock(child);
btrfs_set_lock_blocking(child);
ret = btrfs_cow_block(trans, root, child, mid, 0, &child);
Expand Down Expand Up @@ -1042,7 +1047,11 @@ static noinline int balance_level(struct btrfs_trans_handle *trans,
* otherwise we would have pulled some pointers from the
* right
*/
BUG_ON(!left);
if (!left) {
ret = -EROFS;
btrfs_std_error(root->fs_info, ret);
goto enospc;
}
wret = balance_node_right(trans, root, mid, left);
if (wret < 0) {
ret = wret;
Expand Down

0 comments on commit 305a26a

Please sign in to comment.