Commit b7b1167c authored by Filipe Manana's avatar Filipe Manana Committed by David Sterba

btrfs: simplify exit paths of btrfs_evict_inode()

Instead of using two labels at btrfs_evict_inode() for exiting depending
on whether we need to delete the inode items and orphan or some error
happened, we can use a single exit label if we initialize the block
reserve to NULL, since btrfs_free_block_rsv() ignores a NULL block reserve
pointer. So just do that. It will also make an upcoming change simpler by
avoiding one extra error label.
Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent f8f210dc
...@@ -5271,7 +5271,7 @@ void btrfs_evict_inode(struct inode *inode) ...@@ -5271,7 +5271,7 @@ void btrfs_evict_inode(struct inode *inode)
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
struct btrfs_trans_handle *trans; struct btrfs_trans_handle *trans;
struct btrfs_root *root = BTRFS_I(inode)->root; struct btrfs_root *root = BTRFS_I(inode)->root;
struct btrfs_block_rsv *rsv; struct btrfs_block_rsv *rsv = NULL;
int ret; int ret;
trace_btrfs_inode_evict(inode); trace_btrfs_inode_evict(inode);
...@@ -5288,18 +5288,18 @@ void btrfs_evict_inode(struct inode *inode) ...@@ -5288,18 +5288,18 @@ void btrfs_evict_inode(struct inode *inode)
((btrfs_root_refs(&root->root_item) != 0 && ((btrfs_root_refs(&root->root_item) != 0 &&
root->root_key.objectid != BTRFS_ROOT_TREE_OBJECTID) || root->root_key.objectid != BTRFS_ROOT_TREE_OBJECTID) ||
btrfs_is_free_space_inode(BTRFS_I(inode)))) btrfs_is_free_space_inode(BTRFS_I(inode))))
goto no_delete; goto out;
if (is_bad_inode(inode)) if (is_bad_inode(inode))
goto no_delete; goto out;
if (test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags)) if (test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags))
goto no_delete; goto out;
if (inode->i_nlink > 0) { if (inode->i_nlink > 0) {
BUG_ON(btrfs_root_refs(&root->root_item) != 0 && BUG_ON(btrfs_root_refs(&root->root_item) != 0 &&
root->root_key.objectid != BTRFS_ROOT_TREE_OBJECTID); root->root_key.objectid != BTRFS_ROOT_TREE_OBJECTID);
goto no_delete; goto out;
} }
/* /*
...@@ -5308,7 +5308,7 @@ void btrfs_evict_inode(struct inode *inode) ...@@ -5308,7 +5308,7 @@ void btrfs_evict_inode(struct inode *inode)
*/ */
ret = btrfs_commit_inode_delayed_inode(BTRFS_I(inode)); ret = btrfs_commit_inode_delayed_inode(BTRFS_I(inode));
if (ret) if (ret)
goto no_delete; goto out;
/* /*
* This drops any pending insert or delete operations we have for this * This drops any pending insert or delete operations we have for this
...@@ -5320,7 +5320,7 @@ void btrfs_evict_inode(struct inode *inode) ...@@ -5320,7 +5320,7 @@ void btrfs_evict_inode(struct inode *inode)
rsv = btrfs_alloc_block_rsv(fs_info, BTRFS_BLOCK_RSV_TEMP); rsv = btrfs_alloc_block_rsv(fs_info, BTRFS_BLOCK_RSV_TEMP);
if (!rsv) if (!rsv)
goto no_delete; goto out;
rsv->size = btrfs_calc_metadata_size(fs_info, 1); rsv->size = btrfs_calc_metadata_size(fs_info, 1);
rsv->failfast = true; rsv->failfast = true;
...@@ -5336,7 +5336,7 @@ void btrfs_evict_inode(struct inode *inode) ...@@ -5336,7 +5336,7 @@ void btrfs_evict_inode(struct inode *inode)
trans = evict_refill_and_join(root, rsv); trans = evict_refill_and_join(root, rsv);
if (IS_ERR(trans)) if (IS_ERR(trans))
goto free_rsv; goto out;
trans->block_rsv = rsv; trans->block_rsv = rsv;
...@@ -5350,7 +5350,7 @@ void btrfs_evict_inode(struct inode *inode) ...@@ -5350,7 +5350,7 @@ void btrfs_evict_inode(struct inode *inode)
*/ */
btrfs_btree_balance_dirty_nodelay(fs_info); btrfs_btree_balance_dirty_nodelay(fs_info);
if (ret && ret != -ENOSPC && ret != -EAGAIN) if (ret && ret != -ENOSPC && ret != -EAGAIN)
goto free_rsv; goto out;
else if (!ret) else if (!ret)
break; break;
} }
...@@ -5372,9 +5372,8 @@ void btrfs_evict_inode(struct inode *inode) ...@@ -5372,9 +5372,8 @@ void btrfs_evict_inode(struct inode *inode)
btrfs_end_transaction(trans); btrfs_end_transaction(trans);
} }
free_rsv: out:
btrfs_free_block_rsv(fs_info, rsv); btrfs_free_block_rsv(fs_info, rsv);
no_delete:
/* /*
* If we didn't successfully delete, the orphan item will still be in * If we didn't successfully delete, the orphan item will still be in
* the tree and we'll retry on the next mount. Again, we might also want * the tree and we'll retry on the next mount. Again, we might also want
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment