From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> In xfsprogs, the lifetime of xfs_buf log items doesn't match the kernel because we keep them around after comitting or cancelling transactions. This is confusing, so change the lifetime to be consistent. Worse yet, if an inode cluster buffer gets bjoined to a transaction (e.g. someone called xfs_trans_read_buf) we'll leak it when flushing an inode core back to that buffer. Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> --- libxfs/trans.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libxfs/trans.c b/libxfs/trans.c index d562cdc0..22926236 100644 --- a/libxfs/trans.c +++ b/libxfs/trans.c @@ -545,6 +545,7 @@ libxfs_trans_brelse( xfs_trans_del_item(&bip->bli_item); if (bip->bli_flags & XFS_BLI_HOLD) bip->bli_flags &= ~XFS_BLI_HOLD; + xfs_buf_item_put(bip); bp->b_transp = NULL; libxfs_putbuf(bp); } @@ -904,6 +905,7 @@ buf_item_unlock( hold = bip->bli_flags & XFS_BLI_HOLD; bip->bli_flags &= ~XFS_BLI_HOLD; + xfs_buf_item_put(bip); if (!hold) libxfs_putbuf(bp); }