diff options
author | Tsutomu Itoh <t-itoh@jp.fujitsu.com> | 2011-07-19 09:27:20 +0200 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2011-08-01 20:30:42 +0200 |
commit | b532402e4d147e4f409c4e7f50d4413e8450101d (patch) | |
tree | 0c196fd362d03243704a47e69e41c13acd323bd0 /fs/btrfs/inode.c | |
parent | Btrfs:don't check the return value of __btrfs_add_inode_defrag (diff) | |
download | linux-b532402e4d147e4f409c4e7f50d4413e8450101d.tar.xz linux-b532402e4d147e4f409c4e7f50d4413e8450101d.zip |
Btrfs: return error to caller when btrfs_unlink() failes
When btrfs_unlink_inode() and btrfs_orphan_add() in btrfs_unlink()
are error, the error code is returned to the caller instead of
BUG_ON().
Signed-off-by: Tsutomu Itoh <t-itoh@jp.fujitsu.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r-- | fs/btrfs/inode.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 4360ccb191b1..5da43aea205f 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -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); |