@@ -5435,7 +5435,7 @@ void btrfs_evict_inode(struct inode *inode)
5435
5435
struct btrfs_fs_info * fs_info ;
5436
5436
struct btrfs_trans_handle * trans ;
5437
5437
struct btrfs_root * root = BTRFS_I (inode )-> root ;
5438
- struct btrfs_block_rsv * rsv = NULL ;
5438
+ struct btrfs_block_rsv rsv ;
5439
5439
int ret ;
5440
5440
5441
5441
trace_btrfs_inode_evict (inode );
@@ -5483,11 +5483,9 @@ void btrfs_evict_inode(struct inode *inode)
5483
5483
*/
5484
5484
btrfs_kill_delayed_inode_items (BTRFS_I (inode ));
5485
5485
5486
- rsv = btrfs_alloc_block_rsv (fs_info , BTRFS_BLOCK_RSV_TEMP );
5487
- if (!rsv )
5488
- goto out ;
5489
- rsv -> size = btrfs_calc_metadata_size (fs_info , 1 );
5490
- rsv -> failfast = true;
5486
+ btrfs_init_metadata_block_rsv (fs_info , & rsv , BTRFS_BLOCK_RSV_TEMP );
5487
+ rsv .size = btrfs_calc_metadata_size (fs_info , 1 );
5488
+ rsv .failfast = true;
5491
5489
5492
5490
btrfs_i_size_write (BTRFS_I (inode ), 0 );
5493
5491
@@ -5499,11 +5497,11 @@ void btrfs_evict_inode(struct inode *inode)
5499
5497
.min_type = 0 ,
5500
5498
};
5501
5499
5502
- trans = evict_refill_and_join (root , rsv );
5500
+ trans = evict_refill_and_join (root , & rsv );
5503
5501
if (IS_ERR (trans ))
5504
- goto out ;
5502
+ goto out_release ;
5505
5503
5506
- trans -> block_rsv = rsv ;
5504
+ trans -> block_rsv = & rsv ;
5507
5505
5508
5506
ret = btrfs_truncate_inode_items (trans , root , & control );
5509
5507
trans -> block_rsv = & fs_info -> trans_block_rsv ;
@@ -5515,7 +5513,7 @@ void btrfs_evict_inode(struct inode *inode)
5515
5513
*/
5516
5514
btrfs_btree_balance_dirty_nodelay (fs_info );
5517
5515
if (ret && ret != - ENOSPC && ret != - EAGAIN )
5518
- goto out ;
5516
+ goto out_release ;
5519
5517
else if (!ret )
5520
5518
break ;
5521
5519
}
@@ -5529,16 +5527,17 @@ void btrfs_evict_inode(struct inode *inode)
5529
5527
* If it turns out that we are dropping too many of these, we might want
5530
5528
* to add a mechanism for retrying these after a commit.
5531
5529
*/
5532
- trans = evict_refill_and_join (root , rsv );
5530
+ trans = evict_refill_and_join (root , & rsv );
5533
5531
if (!IS_ERR (trans )) {
5534
- trans -> block_rsv = rsv ;
5532
+ trans -> block_rsv = & rsv ;
5535
5533
btrfs_orphan_del (trans , BTRFS_I (inode ));
5536
5534
trans -> block_rsv = & fs_info -> trans_block_rsv ;
5537
5535
btrfs_end_transaction (trans );
5538
5536
}
5539
5537
5538
+ out_release :
5539
+ btrfs_block_rsv_release (fs_info , & rsv , (u64 )- 1 , NULL );
5540
5540
out :
5541
- btrfs_free_block_rsv (fs_info , rsv );
5542
5541
/*
5543
5542
* If we didn't successfully delete, the orphan item will still be in
5544
5543
* the tree and we'll retry on the next mount. Again, we might also want
0 commit comments