create_reloc_root will return errors in the future, and __add_reloc_root
can return -ENOMEM or -EEXIST, so handle these errors properly.

Signed-off-by: Josef Bacik <jo...@toxicpanda.com>
---
 fs/btrfs/relocation.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c
index 7ca7ab3d40e2..9a028376f475 100644
--- a/fs/btrfs/relocation.c
+++ b/fs/btrfs/relocation.c
@@ -856,9 +856,14 @@ int btrfs_init_reloc_root(struct btrfs_trans_handle *trans,
        reloc_root = create_reloc_root(trans, root, root->root_key.objectid);
        if (clear_rsv)
                trans->block_rsv = rsv;
+       if (IS_ERR(reloc_root))
+               return PTR_ERR(reloc_root);
 
        ret = __add_reloc_root(reloc_root);
-       BUG_ON(ret < 0);
+       if (ret) {
+               btrfs_put_root(reloc_root);
+               return ret;
+       }
        root->reloc_root = btrfs_grab_root(reloc_root);
        return 0;
 }
-- 
2.26.2

Reply via email to