]> git.baikalelectronics.ru Git - kernel.git/commitdiff
xfs: factor out a xfs_defer_create_intent helper
authorChristoph Hellwig <hch@lst.de>
Thu, 16 Feb 2023 05:19:58 +0000 (10:49 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Feb 2023 11:50:35 +0000 (12:50 +0100)
commit 1f1f295945ab9075054e1b05a7d089d016dcf040 upstream.

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@lst.de>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>
Acked-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/xfs/libxfs/xfs_defer.c

index 8cc3faa624049613644b166e9844ec17fe95d92e..a799cd61d85e2da3d57cd171c9e3e6bdf2bb0792 100644 (file)
@@ -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);
        }
 }
 
@@ -427,17 +438,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);