diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 976917ca412a..a257147db7a9 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -4351,10 +4351,14 @@ struct inode *create_reloc_inode(struct btrfs_fs_info *fs_info, root = read_fs_root(fs_info, BTRFS_DATA_RELOC_TREE_OBJECTID); if (IS_ERR(root)) return ERR_CAST(root); + if (!btrfs_grab_fs_root(root)) + return ERR_PTR(-ENOENT); trans = btrfs_start_transaction(root, 6); - if (IS_ERR(trans)) + if (IS_ERR(trans)) { + btrfs_put_fs_root(root); return ERR_CAST(trans); + } err = btrfs_find_free_objectid(root, &objectid); if (err) @@ -4372,6 +4376,7 @@ struct inode *create_reloc_inode(struct btrfs_fs_info *fs_info, err = btrfs_orphan_add(trans, BTRFS_I(inode)); out: + btrfs_put_fs_root(root); btrfs_end_transaction(trans); btrfs_btree_balance_dirty(fs_info); if (err) {