From: Josef Bacik Date: Fri, 12 Mar 2021 20:25:25 +0000 (-0500) Subject: btrfs: handle extent reference errors in do_relocation X-Git-Tag: v5.13-rc1~159^2~23 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=eb6b7fb4b544ae0ab19a85b55ca548d838dc4beb;p=thirdparty%2Fkernel%2Flinux.git btrfs: handle extent reference errors in do_relocation We can already deal with errors appropriately from do_relocation, simply handle any errors that come from changing the refs at this point cleanly. We have to abort the transaction if we fail here as we've modified metadata at this point. Signed-off-by: Josef Bacik Reviewed-by: David Sterba Signed-off-by: David Sterba --- diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 2663c4bf0948a..2d82e5170e4c0 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2437,10 +2437,11 @@ static int do_relocation(struct btrfs_trans_handle *trans, btrfs_init_tree_ref(&ref, node->level, btrfs_header_owner(upper->eb)); ret = btrfs_inc_extent_ref(trans, &ref); - BUG_ON(ret); - - ret = btrfs_drop_subtree(trans, root, eb, upper->eb); - BUG_ON(ret); + if (!ret) + ret = btrfs_drop_subtree(trans, root, eb, + upper->eb); + if (ret) + btrfs_abort_transaction(trans, ret); } next: if (!upper->pending)