From: Brian Foster <bfoster@redhat.com>
To: Christoph Hellwig <hch@lst.de>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH 04/11] xfs: factor out a xfs_defer_create_intent helper
Date: Thu, 30 Apr 2020 07:03:16 -0400 [thread overview]
Message-ID: <20200430110316.GD5349@bfoster> (raw)
In-Reply-To: <20200429150511.2191150-5-hch@lst.de>
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@lst.de>
> ---
Reviewed-by: Brian Foster <bfoster@redhat.com>
> 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
>
next prev parent reply other threads:[~2020-04-30 11:03 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-29 15:05 deferred operations cleanup Christoph Hellwig
2020-04-29 15:05 ` [PATCH 01/11] xfs: remove the xfs_efi_log_item_t typedef Christoph Hellwig
2020-04-30 11:02 ` Brian Foster
2020-04-29 15:05 ` [PATCH 02/11] xfs: remove the xfs_efd_log_item_t typedef Christoph Hellwig
2020-04-30 11:03 ` Brian Foster
2020-04-29 15:05 ` [PATCH 03/11] xfs: remove the xfs_inode_log_item_t typedef Christoph Hellwig
2020-04-30 11:03 ` Brian Foster
2020-04-29 15:05 ` [PATCH 04/11] xfs: factor out a xfs_defer_create_intent helper Christoph Hellwig
2020-04-30 11:03 ` Brian Foster [this message]
2020-04-29 15:05 ` [PATCH 05/11] xfs: merge the ->log_item defer op into ->create_intent Christoph Hellwig
2020-04-30 11:04 ` Brian Foster
2020-04-29 15:05 ` [PATCH 06/11] xfs: merge the ->diff_items " Christoph Hellwig
2020-04-30 11:04 ` Brian Foster
2020-04-29 15:05 ` [PATCH 07/11] xfs: turn dfp_intent into a xfs_log_item Christoph Hellwig
2020-04-30 11:04 ` Brian Foster
2020-04-29 15:05 ` [PATCH 08/11] xfs: refactor xfs_defer_finish_noroll Christoph Hellwig
2020-04-30 11:04 ` Brian Foster
2020-04-29 15:05 ` [PATCH 09/11] xfs: turn dfp_done into a xfs_log_item Christoph Hellwig
2020-04-30 11:04 ` Brian Foster
2020-04-29 15:05 ` [PATCH 10/11] xfs: use a xfs_btree_cur for the ->finish_cleanup state Christoph Hellwig
2020-04-30 11:04 ` Brian Foster
2020-04-29 15:05 ` [PATCH 11/11] xfs: spell out the parameter name for ->cancel_item Christoph Hellwig
2020-04-30 11:04 ` Brian Foster
2020-04-30 15:35 ` deferred operations cleanup Darrick J. Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200430110316.GD5349@bfoster \
--to=bfoster@redhat.com \
--cc=hch@lst.de \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).