On Fri, Jul 12, 2019 at 04:34:20PM -0500, Eric Sandeen wrote: > This puts these functions in libxfs/trans.c in the same order as > they appear in kernelspace xfs_trans_buf.c for easier comparison. > > No functional changes. > > Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx> Looks good, Reviewed-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx> > --- > > diff --git a/libxfs/trans.c b/libxfs/trans.c > index 5c56b4fe..8954f0fe 100644 > --- a/libxfs/trans.c > +++ b/libxfs/trans.c > @@ -330,80 +330,6 @@ libxfs_trans_cancel( > xfs_trans_free(tp); > } > > -void > -libxfs_trans_inode_alloc_buf( > - xfs_trans_t *tp, > - xfs_buf_t *bp) > -{ > - xfs_buf_log_item_t *bip = bp->b_log_item; > - > - ASSERT(bp->b_transp == tp); > - ASSERT(bip != NULL); > - bip->bli_flags |= XFS_BLI_INODE_ALLOC_BUF; > - xfs_trans_buf_set_type(tp, bp, XFS_BLFT_DINO_BUF); > -} > - > -/* > - * Mark a buffer dirty in the transaction. > - */ > -void > -libxfs_trans_dirty_buf( > - struct xfs_trans *tp, > - struct xfs_buf *bp) > -{ > - struct xfs_buf_log_item *bip = bp->b_log_item; > - > - ASSERT(bp->b_transp == tp); > - ASSERT(bip != NULL); > - > - tp->t_flags |= XFS_TRANS_DIRTY; > - set_bit(XFS_LI_DIRTY, &bip->bli_item.li_flags); > -} > - > -/* > - * This is called to mark bytes first through last inclusive of the given > - * buffer as needing to be logged when the transaction is committed. > - * The buffer must already be associated with the given transaction. > - * > - * First and last are numbers relative to the beginning of this buffer, > - * so the first byte in the buffer is numbered 0 regardless of the > - * value of b_blkno. > - */ > -void > -libxfs_trans_log_buf( > - struct xfs_trans *tp, > - struct xfs_buf *bp, > - uint first, > - uint last) > -{ > - struct xfs_buf_log_item *bip = bp->b_log_item; > - > - ASSERT((first <= last) && (last < bp->b_bcount)); > - > - xfs_trans_dirty_buf(tp, bp); > - xfs_buf_item_log(bip, first, last); > -} > - > -/* > - * For userspace, ordered buffers just need to be marked dirty so > - * the transaction commit will write them and mark them up-to-date. > - * In essence, they are just like any other logged buffer in userspace. > - * > - * If the buffer is already dirty, trigger the "already logged" return condition. > - */ > -bool > -libxfs_trans_ordered_buf( > - struct xfs_trans *tp, > - struct xfs_buf *bp) > -{ > - struct xfs_buf_log_item *bip = bp->b_log_item; > - bool ret; > - > - ret = test_bit(XFS_LI_DIRTY, &bip->bli_item.li_flags); > - libxfs_trans_log_buf(tp, bp, 0, bp->b_bcount); > - return ret; > -} > - > static void > xfs_buf_item_put( > struct xfs_buf_log_item *bip) > @@ -414,63 +340,7 @@ xfs_buf_item_put( > kmem_zone_free(xfs_buf_item_zone, bip); > } > > -void > -libxfs_trans_brelse( > - xfs_trans_t *tp, > - xfs_buf_t *bp) > -{ > - xfs_buf_log_item_t *bip; > - > - if (tp == NULL) { > - ASSERT(bp->b_transp == NULL); > - libxfs_putbuf(bp); > - return; > - } > - > - trace_xfs_trans_brelse(bip); > - ASSERT(bp->b_transp == tp); > - bip = bp->b_log_item; > - ASSERT(bip->bli_item.li_type == XFS_LI_BUF); > - if (bip->bli_recur > 0) { > - bip->bli_recur--; > - return; > - } > - /* If dirty/stale, can't release till transaction committed */ > - if (bip->bli_flags & XFS_BLI_STALE) > - return; > - if (test_bit(XFS_LI_DIRTY, &bip->bli_item.li_flags)) > - return; > - 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); > -} > - > -void > -libxfs_trans_binval( > - xfs_trans_t *tp, > - xfs_buf_t *bp) > -{ > - xfs_buf_log_item_t *bip = bp->b_log_item; > - > - ASSERT(bp->b_transp == tp); > - ASSERT(bip != NULL); > - > - trace_xfs_trans_binval(bip); > - > - if (bip->bli_flags & XFS_BLI_STALE) > - return; > - XFS_BUF_UNDELAYWRITE(bp); > - xfs_buf_stale(bp); > - bip->bli_flags |= XFS_BLI_STALE; > - bip->bli_flags &= ~XFS_BLI_DIRTY; > - bip->__bli_format.blf_flags &= ~XFS_BLF_INODE_BUF; > - bip->__bli_format.blf_flags |= XFS_BLF_CANCEL; > - set_bit(XFS_LI_DIRTY, &bip->bli_item.li_flags); > - tp->t_flags |= XFS_TRANS_DIRTY; > -} > +/* from xfs_trans_buf.c */ > > /* > * Add the locked buffer to the transaction. > @@ -519,20 +389,6 @@ libxfs_trans_bjoin( > trace_xfs_trans_bjoin(bp->b_log_item); > } > > -void > -libxfs_trans_bhold( > - xfs_trans_t *tp, > - xfs_buf_t *bp) > -{ > - xfs_buf_log_item_t *bip = bp->b_log_item; > - > - ASSERT(bp->b_transp == tp); > - ASSERT(bip != NULL); > - > - bip->bli_flags |= XFS_BLI_HOLD; > - trace_xfs_trans_bhold(bip); > -} > - > xfs_buf_t * > libxfs_trans_get_buf_map( > xfs_trans_t *tp, > @@ -651,6 +507,160 @@ out_relse: > return error; > } > > +void > +libxfs_trans_brelse( > + xfs_trans_t *tp, > + xfs_buf_t *bp) > +{ > + xfs_buf_log_item_t *bip; > + > + if (tp == NULL) { > + ASSERT(bp->b_transp == NULL); > + libxfs_putbuf(bp); > + return; > + } > + > + trace_xfs_trans_brelse(bip); > + ASSERT(bp->b_transp == tp); > + bip = bp->b_log_item; > + ASSERT(bip->bli_item.li_type == XFS_LI_BUF); > + if (bip->bli_recur > 0) { > + bip->bli_recur--; > + return; > + } > + /* If dirty/stale, can't release till transaction committed */ > + if (bip->bli_flags & XFS_BLI_STALE) > + return; > + if (test_bit(XFS_LI_DIRTY, &bip->bli_item.li_flags)) > + return; > + 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); > +} > + > +/* > + * Mark the buffer as not needing to be unlocked when the buf item's > + * iop_unlock() routine is called. The buffer must already be locked > + * and associated with the given transaction. > + */ > +/* ARGSUSED */ > +void > +libxfs_trans_bhold( > + xfs_trans_t *tp, > + xfs_buf_t *bp) > +{ > + xfs_buf_log_item_t *bip = bp->b_log_item; > + > + ASSERT(bp->b_transp == tp); > + ASSERT(bip != NULL); > + > + bip->bli_flags |= XFS_BLI_HOLD; > + trace_xfs_trans_bhold(bip); > +} > + > +/* > + * Mark a buffer dirty in the transaction. > + */ > +void > +libxfs_trans_dirty_buf( > + struct xfs_trans *tp, > + struct xfs_buf *bp) > +{ > + struct xfs_buf_log_item *bip = bp->b_log_item; > + > + ASSERT(bp->b_transp == tp); > + ASSERT(bip != NULL); > + > + tp->t_flags |= XFS_TRANS_DIRTY; > + set_bit(XFS_LI_DIRTY, &bip->bli_item.li_flags); > +} > + > +/* > + * This is called to mark bytes first through last inclusive of the given > + * buffer as needing to be logged when the transaction is committed. > + * The buffer must already be associated with the given transaction. > + * > + * First and last are numbers relative to the beginning of this buffer, > + * so the first byte in the buffer is numbered 0 regardless of the > + * value of b_blkno. > + */ > +void > +libxfs_trans_log_buf( > + struct xfs_trans *tp, > + struct xfs_buf *bp, > + uint first, > + uint last) > +{ > + struct xfs_buf_log_item *bip = bp->b_log_item; > + > + ASSERT((first <= last) && (last < bp->b_bcount)); > + > + xfs_trans_dirty_buf(tp, bp); > + xfs_buf_item_log(bip, first, last); > +} > + > +void > +libxfs_trans_binval( > + xfs_trans_t *tp, > + xfs_buf_t *bp) > +{ > + xfs_buf_log_item_t *bip = bp->b_log_item; > + > + ASSERT(bp->b_transp == tp); > + ASSERT(bip != NULL); > + > + trace_xfs_trans_binval(bip); > + > + if (bip->bli_flags & XFS_BLI_STALE) > + return; > + XFS_BUF_UNDELAYWRITE(bp); > + xfs_buf_stale(bp); > + bip->bli_flags |= XFS_BLI_STALE; > + bip->bli_flags &= ~XFS_BLI_DIRTY; > + bip->__bli_format.blf_flags &= ~XFS_BLF_INODE_BUF; > + bip->__bli_format.blf_flags |= XFS_BLF_CANCEL; > + set_bit(XFS_LI_DIRTY, &bip->bli_item.li_flags); > + tp->t_flags |= XFS_TRANS_DIRTY; > +} > + > +void > +libxfs_trans_inode_alloc_buf( > + xfs_trans_t *tp, > + xfs_buf_t *bp) > +{ > + xfs_buf_log_item_t *bip = bp->b_log_item; > + > + ASSERT(bp->b_transp == tp); > + ASSERT(bip != NULL); > + bip->bli_flags |= XFS_BLI_INODE_ALLOC_BUF; > + xfs_trans_buf_set_type(tp, bp, XFS_BLFT_DINO_BUF); > +} > + > +/* > + * For userspace, ordered buffers just need to be marked dirty so > + * the transaction commit will write them and mark them up-to-date. > + * In essence, they are just like any other logged buffer in userspace. > + * > + * If the buffer is already dirty, trigger the "already logged" return condition. > + */ > +bool > +libxfs_trans_ordered_buf( > + struct xfs_trans *tp, > + struct xfs_buf *bp) > +{ > + struct xfs_buf_log_item *bip = bp->b_log_item; > + bool ret; > + > + ret = test_bit(XFS_LI_DIRTY, &bip->bli_item.li_flags); > + libxfs_trans_log_buf(tp, bp, 0, bp->b_bcount); > + return ret; > +} > + > +/* end of xfs_trans_buf.c */ > + > /* > * Record the indicated change to the given field for application > * to the file system's superblock when the transaction commits. > -- Carlos