|
@@ -5593,13 +5593,18 @@ void btrfs_evict_inode(struct inode *inode)
|
|
|
trans->block_rsv = rsv;
|
|
|
|
|
|
ret = btrfs_truncate_inode_items(trans, root, inode, 0, 0);
|
|
|
- if (ret != -ENOSPC && ret != -EAGAIN)
|
|
|
+ if (ret) {
|
|
|
+ trans->block_rsv = &fs_info->trans_block_rsv;
|
|
|
+ btrfs_end_transaction(trans);
|
|
|
+ btrfs_btree_balance_dirty(fs_info);
|
|
|
+ if (ret != -ENOSPC && ret != -EAGAIN) {
|
|
|
+ btrfs_orphan_del(NULL, BTRFS_I(inode));
|
|
|
+ btrfs_free_block_rsv(fs_info, rsv);
|
|
|
+ goto no_delete;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
break;
|
|
|
-
|
|
|
- trans->block_rsv = &fs_info->trans_block_rsv;
|
|
|
- btrfs_end_transaction(trans);
|
|
|
- trans = NULL;
|
|
|
- btrfs_btree_balance_dirty(fs_info);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
btrfs_free_block_rsv(fs_info, rsv);
|
|
@@ -5608,12 +5613,8 @@ void btrfs_evict_inode(struct inode *inode)
|
|
|
* Errors here aren't a big deal, it just means we leave orphan items
|
|
|
* in the tree. They will be cleaned up on the next mount.
|
|
|
*/
|
|
|
- if (ret == 0) {
|
|
|
- trans->block_rsv = root->orphan_block_rsv;
|
|
|
- btrfs_orphan_del(trans, BTRFS_I(inode));
|
|
|
- } else {
|
|
|
- btrfs_orphan_del(NULL, BTRFS_I(inode));
|
|
|
- }
|
|
|
+ trans->block_rsv = root->orphan_block_rsv;
|
|
|
+ btrfs_orphan_del(trans, BTRFS_I(inode));
|
|
|
|
|
|
trans->block_rsv = &fs_info->trans_block_rsv;
|
|
|
if (!(root == fs_info->tree_root ||
|