|
@@ -2217,7 +2217,8 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode)
|
|
|
|
|
|
if (!root->orphan_block_rsv) {
|
|
|
block_rsv = btrfs_alloc_block_rsv(root);
|
|
|
- BUG_ON(!block_rsv);
|
|
|
+ if (!block_rsv)
|
|
|
+ return -ENOMEM;
|
|
|
}
|
|
|
|
|
|
spin_lock(&root->orphan_lock);
|
|
@@ -3002,13 +3003,16 @@ static int btrfs_unlink(struct inode *dir, struct dentry *dentry)
|
|
|
|
|
|
ret = btrfs_unlink_inode(trans, root, dir, dentry->d_inode,
|
|
|
dentry->d_name.name, dentry->d_name.len);
|
|
|
- BUG_ON(ret);
|
|
|
+ if (ret)
|
|
|
+ goto out;
|
|
|
|
|
|
if (inode->i_nlink == 0) {
|
|
|
ret = btrfs_orphan_add(trans, inode);
|
|
|
- BUG_ON(ret);
|
|
|
+ if (ret)
|
|
|
+ goto out;
|
|
|
}
|
|
|
|
|
|
+out:
|
|
|
nr = trans->blocks_used;
|
|
|
__unlink_end_trans(trans, root);
|
|
|
btrfs_btree_balance_dirty(root, nr);
|