From: Josef Bacik <josef@toxicpanda.com> Date: Fri, 12 Mar 2021 20:25:22 +0000 (-0500) Subject: btrfs: handle btrfs_cow_block errors in replace_path X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=45b87c5d2557a327bb702d00040cfbf2271b56ed;p=linux.git btrfs: handle btrfs_cow_block errors in replace_path If we error out COWing the root node when doing a replace_path then we simply unlock and free the buffer and return the error. Reviewed-by: Qu Wenruo <wqu@suse.com> Signed-off-by: Josef Bacik <josef@toxicpanda.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com> --- diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 62b6d3f1fbead..f1702157532a9 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1231,7 +1231,11 @@ again: if (cow) { ret = btrfs_cow_block(trans, dest, eb, NULL, 0, &eb, BTRFS_NESTING_COW); - BUG_ON(ret); + if (ret) { + btrfs_tree_unlock(eb); + free_extent_buffer(eb); + return ret; + } } if (next_key) { @@ -1291,7 +1295,11 @@ again: ret = btrfs_cow_block(trans, dest, eb, parent, slot, &eb, BTRFS_NESTING_COW); - BUG_ON(ret); + if (ret) { + btrfs_tree_unlock(eb); + free_extent_buffer(eb); + break; + } } btrfs_tree_unlock(parent);