mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-28 04:17:47 +00:00
btrfs: Go readonly on tree errors in balance_level
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>
This commit is contained in:
parent
b68dc2a93e
commit
305a26af5b
@ -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);
|
||||
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user