btrfs: have proper error handling in btrfs_init_reloc_root
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 <josef@toxicpanda.com> Reviewed-by: David Sterba <dsterba@suse.com> [ add comment ] Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
03a7e111a9
commit
00bb36a0e7
1 changed files with 7 additions and 1 deletions
|
@ -856,9 +856,15 @@ int btrfs_init_reloc_root(struct btrfs_trans_handle *trans,
|
||||||
reloc_root = create_reloc_root(trans, root, root->root_key.objectid);
|
reloc_root = create_reloc_root(trans, root, root->root_key.objectid);
|
||||||
if (clear_rsv)
|
if (clear_rsv)
|
||||||
trans->block_rsv = rsv;
|
trans->block_rsv = rsv;
|
||||||
|
if (IS_ERR(reloc_root))
|
||||||
|
return PTR_ERR(reloc_root);
|
||||||
|
|
||||||
ret = __add_reloc_root(reloc_root);
|
ret = __add_reloc_root(reloc_root);
|
||||||
BUG_ON(ret < 0);
|
if (ret) {
|
||||||
|
/* Pairs with create_reloc_root */
|
||||||
|
btrfs_put_root(reloc_root);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
root->reloc_root = btrfs_grab_root(reloc_root);
|
root->reloc_root = btrfs_grab_root(reloc_root);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue