On Wed, Aug 12, 2020 at 07:25:54PM +1000, Dave Chinner wrote: > From: Dave Chinner <dchinner@xxxxxxxxxx> > > Combine the logging of the inode unlink list update into the > calling function that looks up the buffer we end up logging. These > do not need to be separate functions as they are both short, simple > operations and there's only a single call path through them. This > new function will end up being the core of the iunlink log item > processing... > > Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> This was pretty easy to follow, Reviewed-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> --D > --- > fs/xfs/xfs_inode.c | 58 ++++++++++++++++------------------------------ > 1 file changed, 20 insertions(+), 38 deletions(-) > > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > index 4f616e1b64dc..82242d15b1d7 100644 > --- a/fs/xfs/xfs_inode.c > +++ b/fs/xfs/xfs_inode.c > @@ -1972,38 +1972,12 @@ xfs_iunlink_update_bucket( > return 0; > } > > -/* Set an on-disk inode's next_unlinked pointer. */ > -STATIC void > -xfs_iunlink_update_dinode( > - struct xfs_trans *tp, > - xfs_agnumber_t agno, > - xfs_agino_t agino, > - struct xfs_buf *ibp, > - struct xfs_dinode *dip, > - struct xfs_imap *imap, > - xfs_agino_t next_agino) > -{ > - struct xfs_mount *mp = tp->t_mountp; > - int offset; > - > - ASSERT(xfs_verify_agino_or_null(mp, agno, next_agino)); > - > - trace_xfs_iunlink_update_dinode(mp, agno, agino, > - be32_to_cpu(dip->di_next_unlinked), next_agino); > - > - dip->di_next_unlinked = cpu_to_be32(next_agino); > - offset = imap->im_boffset + > - offsetof(struct xfs_dinode, di_next_unlinked); > - > - /* need to recalc the inode CRC if appropriate */ > - xfs_dinode_calc_crc(mp, dip); > - xfs_trans_inode_buf(tp, ibp); > - xfs_trans_log_buf(tp, ibp, offset, offset + sizeof(xfs_agino_t) - 1); > -} > - > -/* Set an in-core inode's unlinked pointer and return the old value. */ > +/* > + * Look up the inode cluster buffer and log the on-disk unlinked inode change > + * we need to make. > + */ > STATIC int > -xfs_iunlink_update_inode( > +xfs_iunlink_log_inode( > struct xfs_trans *tp, > struct xfs_inode *ip, > xfs_agnumber_t agno, > @@ -2013,6 +1987,7 @@ xfs_iunlink_update_inode( > struct xfs_mount *mp = tp->t_mountp; > struct xfs_dinode *dip; > struct xfs_buf *ibp; > + int offset; > int error; > > ASSERT(xfs_verify_agino_or_null(mp, agno, next_agino)); > @@ -2028,9 +2003,17 @@ xfs_iunlink_update_inode( > return -EFSCORRUPTED; > } > > - /* Ok, update the new pointer. */ > - xfs_iunlink_update_dinode(tp, agno, XFS_INO_TO_AGINO(mp, ip->i_ino), > - ibp, dip, &ip->i_imap, next_agino); > + trace_xfs_iunlink_update_dinode(mp, agno, > + XFS_INO_TO_AGINO(mp, ip->i_ino), > + be32_to_cpu(dip->di_next_unlinked), next_agino); > + > + dip->di_next_unlinked = cpu_to_be32(next_agino); > + offset = ip->i_imap.im_boffset + > + offsetof(struct xfs_dinode, di_next_unlinked); > + > + xfs_dinode_calc_crc(mp, dip); > + xfs_trans_inode_buf(tp, ibp); > + xfs_trans_log_buf(tp, ibp, offset, offset + sizeof(xfs_agino_t) - 1); > return 0; > } > > @@ -2056,7 +2039,7 @@ xfs_iunlink_insert_inode( > * inode to the current head of the list. > */ > next_agino = XFS_INO_TO_AGINO(mp, nip->i_ino); > - error = xfs_iunlink_update_inode(tp, ip, agno, NULLAGINO, > + error = xfs_iunlink_log_inode(tp, ip, agno, NULLAGINO, > next_agino); > if (error) > return error; > @@ -2129,7 +2112,7 @@ xfs_iunlink_remove_inode( > } > > /* Clear the on disk next unlinked pointer for this inode. */ > - error = xfs_iunlink_update_inode(tp, ip, agno, next_agino, NULLAGINO); > + error = xfs_iunlink_log_inode(tp, ip, agno, next_agino, NULLAGINO); > if (error) > return error; > > @@ -2138,8 +2121,7 @@ xfs_iunlink_remove_inode( > struct xfs_inode, i_unlink)) { > struct xfs_inode *pip = list_prev_entry(ip, i_unlink); > > - return xfs_iunlink_update_inode(tp, pip, agno, agino, > - next_agino); > + return xfs_iunlink_log_inode(tp, pip, agno, agino, next_agino); > } > > /* Point the head of the list to the next unlinked inode. */ > -- > 2.26.2.761.g0e0b3e54be >