On 4/22/19 10:45 AM, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > > When we're flushing an inode log item, it is not necessary to mess with > the inode cluster buffer's log item because the iflush code paths pass > the inode log item directly. The unconditional reset causes us to leak > buffer log items. > > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > --- > libxfs/trans.c | 2 -- > libxfs/util.c | 1 - > 2 files changed, 3 deletions(-) > > > diff --git a/libxfs/trans.c b/libxfs/trans.c > index 629501f8..d562cdc0 100644 > --- a/libxfs/trans.c > +++ b/libxfs/trans.c > @@ -826,10 +826,8 @@ inode_item_done( > * of whether the flush succeed or not. If we fail the flush, make sure > * we still release the buffer reference we currently hold. > */ > - bp->b_log_item = iip; Weird, digging WAY back into history, I can't figure out why this was ever done. Given that nothing ever retrieves b_log_item as an inode log item, this seems clearly wrong, so, ok, sure! Reviewed-by: Eric Sandeen <sandeen@xxxxxxxxxx> > error = libxfs_iflush_int(ip, bp); > ip->i_transp = NULL; /* disassociate from transaction */ > - bp->b_log_item = NULL; /* remove log item */ > bp->b_transp = NULL; /* remove xact ptr */ > > if (error) { > diff --git a/libxfs/util.c b/libxfs/util.c > index ea75fa20..9fe9a367 100644 > --- a/libxfs/util.c > +++ b/libxfs/util.c > @@ -394,7 +394,6 @@ libxfs_iflush_int(xfs_inode_t *ip, xfs_buf_t *bp) > xfs_dinode_t *dip; > xfs_mount_t *mp; > > - ASSERT(bp-b_log_item != NULL); > ASSERT(ip->i_d.di_format != XFS_DINODE_FMT_BTREE || > ip->i_d.di_nextents > ip->i_df.if_ext_max); > ASSERT(ip->i_d.di_version > 1); >