diff options
Diffstat (limited to 'fs/xfs/xfs_trans_buf.c')
-rw-r--r-- | fs/xfs/xfs_trans_buf.c | 23 |
1 files changed, 2 insertions, 21 deletions
diff --git a/fs/xfs/xfs_trans_buf.c b/fs/xfs/xfs_trans_buf.c index 7498f87ceed3..286a287ac57a 100644 --- a/fs/xfs/xfs_trans_buf.c +++ b/fs/xfs/xfs_trans_buf.c | |||
@@ -339,8 +339,6 @@ xfs_trans_brelse( | |||
339 | struct xfs_buf *bp) | 339 | struct xfs_buf *bp) |
340 | { | 340 | { |
341 | struct xfs_buf_log_item *bip = bp->b_log_item; | 341 | struct xfs_buf_log_item *bip = bp->b_log_item; |
342 | bool freed; | ||
343 | bool dirty; | ||
344 | 342 | ||
345 | ASSERT(bp->b_transp == tp); | 343 | ASSERT(bp->b_transp == tp); |
346 | 344 | ||
@@ -379,25 +377,8 @@ xfs_trans_brelse( | |||
379 | xfs_trans_del_item(&bip->bli_item); | 377 | xfs_trans_del_item(&bip->bli_item); |
380 | bip->bli_flags &= ~XFS_BLI_HOLD; | 378 | bip->bli_flags &= ~XFS_BLI_HOLD; |
381 | 379 | ||
382 | /* | 380 | /* drop the reference to the bli */ |
383 | * Drop the reference to the bli. At this point, the bli must be either | 381 | xfs_buf_item_put(bip); |
384 | * freed or dirty (or both). If freed, there are a couple cases where we | ||
385 | * are responsible to free the item. If the bli is clean, we're the last | ||
386 | * user of it. If the fs has shut down, the bli may be dirty and AIL | ||
387 | * resident, but won't ever be written back. We therefore may also need | ||
388 | * to remove it from the AIL before freeing it. | ||
389 | */ | ||
390 | freed = atomic_dec_and_test(&bip->bli_refcount); | ||
391 | dirty = bip->bli_flags & XFS_BLI_DIRTY; | ||
392 | ASSERT(freed || dirty); | ||
393 | if (freed) { | ||
394 | bool abort = XFS_FORCED_SHUTDOWN(tp->t_mountp); | ||
395 | ASSERT(abort || !test_bit(XFS_LI_IN_AIL, &bip->bli_item.li_flags)); | ||
396 | if (abort) | ||
397 | xfs_trans_ail_remove(&bip->bli_item, SHUTDOWN_LOG_IO_ERROR); | ||
398 | if (!dirty || abort) | ||
399 | xfs_buf_item_relse(bp); | ||
400 | } | ||
401 | 382 | ||
402 | bp->b_transp = NULL; | 383 | bp->b_transp = NULL; |
403 | xfs_buf_relse(bp); | 384 | xfs_buf_relse(bp); |