|
@@ -1032,14 +1032,17 @@ static noinline int update_ref_for_cow(struct btrfs_trans_handle *trans,
|
|
|
root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) &&
|
|
|
!(flags & BTRFS_BLOCK_FLAG_FULL_BACKREF)) {
|
|
|
ret = btrfs_inc_ref(trans, root, buf, 1);
|
|
|
- BUG_ON(ret); /* -ENOMEM */
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
|
|
|
if (root->root_key.objectid ==
|
|
|
BTRFS_TREE_RELOC_OBJECTID) {
|
|
|
ret = btrfs_dec_ref(trans, root, buf, 0);
|
|
|
- BUG_ON(ret); /* -ENOMEM */
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
ret = btrfs_inc_ref(trans, root, cow, 1);
|
|
|
- BUG_ON(ret); /* -ENOMEM */
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
}
|
|
|
new_flags |= BTRFS_BLOCK_FLAG_FULL_BACKREF;
|
|
|
} else {
|
|
@@ -1049,7 +1052,8 @@ static noinline int update_ref_for_cow(struct btrfs_trans_handle *trans,
|
|
|
ret = btrfs_inc_ref(trans, root, cow, 1);
|
|
|
else
|
|
|
ret = btrfs_inc_ref(trans, root, cow, 0);
|
|
|
- BUG_ON(ret); /* -ENOMEM */
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
}
|
|
|
if (new_flags != 0) {
|
|
|
int level = btrfs_header_level(buf);
|
|
@@ -1068,9 +1072,11 @@ static noinline int update_ref_for_cow(struct btrfs_trans_handle *trans,
|
|
|
ret = btrfs_inc_ref(trans, root, cow, 1);
|
|
|
else
|
|
|
ret = btrfs_inc_ref(trans, root, cow, 0);
|
|
|
- BUG_ON(ret); /* -ENOMEM */
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
ret = btrfs_dec_ref(trans, root, buf, 1);
|
|
|
- BUG_ON(ret); /* -ENOMEM */
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
}
|
|
|
clean_tree_block(fs_info, buf);
|
|
|
*last_ref = 1;
|