On Wed, Apr 29, 2020 at 05:05:04PM +0200, Christoph Hellwig wrote: > Create a helper that encapsulates the whole logic to create a defer > intent. This reorders some of the work that was done, but none of > that has an affect on the operation as only fields that don't directly > interact are affected. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > --- Reviewed-by: Brian Foster <bfoster@xxxxxxxxxx> > fs/xfs/libxfs/xfs_defer.c | 39 +++++++++++++++++++++++---------------- > 1 file changed, 23 insertions(+), 16 deletions(-) > > diff --git a/fs/xfs/libxfs/xfs_defer.c b/fs/xfs/libxfs/xfs_defer.c > index 22557527cfdb6..8a38da602b7d9 100644 > --- a/fs/xfs/libxfs/xfs_defer.c > +++ b/fs/xfs/libxfs/xfs_defer.c > @@ -178,6 +178,23 @@ static const struct xfs_defer_op_type *defer_op_types[] = { > [XFS_DEFER_OPS_TYPE_AGFL_FREE] = &xfs_agfl_free_defer_type, > }; > > +static void > +xfs_defer_create_intent( > + struct xfs_trans *tp, > + struct xfs_defer_pending *dfp, > + bool sort) > +{ > + const struct xfs_defer_op_type *ops = defer_op_types[dfp->dfp_type]; > + struct list_head *li; > + > + if (sort) > + list_sort(tp->t_mountp, &dfp->dfp_work, ops->diff_items); > + > + dfp->dfp_intent = ops->create_intent(tp, dfp->dfp_count); > + list_for_each(li, &dfp->dfp_work) > + ops->log_item(tp, dfp->dfp_intent, li); > +} > + > /* > * For each pending item in the intake list, log its intent item and the > * associated extents, then add the entire intake list to the end of > @@ -187,17 +204,11 @@ STATIC void > xfs_defer_create_intents( > struct xfs_trans *tp) > { > - struct list_head *li; > struct xfs_defer_pending *dfp; > - const struct xfs_defer_op_type *ops; > > list_for_each_entry(dfp, &tp->t_dfops, dfp_list) { > - ops = defer_op_types[dfp->dfp_type]; > - dfp->dfp_intent = ops->create_intent(tp, dfp->dfp_count); > trace_xfs_defer_create_intent(tp->t_mountp, dfp); > - list_sort(tp->t_mountp, &dfp->dfp_work, ops->diff_items); > - list_for_each(li, &dfp->dfp_work) > - ops->log_item(tp, dfp->dfp_intent, li); > + xfs_defer_create_intent(tp, dfp, true); > } > } > > @@ -419,17 +430,13 @@ xfs_defer_finish_noroll( > } > if (error == -EAGAIN) { > /* > - * Caller wants a fresh transaction, so log a > - * new log intent item to replace the old one > - * and roll the transaction. See "Requesting > - * a Fresh Transaction while Finishing > - * Deferred Work" above. > + * Caller wants a fresh transaction, so log a new log > + * intent item to replace the old one and roll the > + * transaction. See "Requesting a Fresh Transaction > + * while Finishing Deferred Work" above. > */ > - dfp->dfp_intent = ops->create_intent(*tp, > - dfp->dfp_count); > dfp->dfp_done = NULL; > - list_for_each(li, &dfp->dfp_work) > - ops->log_item(*tp, dfp->dfp_intent, li); > + xfs_defer_create_intent(*tp, dfp, false); > } else { > /* Done with the dfp, free it. */ > list_del(&dfp->dfp_list); > -- > 2.26.2 >