From: Dave Chinner <david@fromorbit.com>
To: Gao Xiang <hsiangkao@redhat.com>
Cc: linux-xfs@vger.kernel.org, Dave Chinner <dchinner@redhat.com>,
"Darrick J. Wong" <darrick.wong@oracle.com>
Subject: Re: [PATCH v2] xfs: get rid of unnecessary xfs_perag_{get,put} pairs
Date: Fri, 5 Jun 2020 07:59:17 +1000 [thread overview]
Message-ID: <20200604215917.GS2040@dread.disaster.area> (raw)
In-Reply-To: <20200603121156.3399-1-hsiangkao@redhat.com>
On Wed, Jun 03, 2020 at 08:11:56PM +0800, Gao Xiang wrote:
> In the course of some operations, we look up the perag from
> the mount multiple times to get or change perag information.
> These are often very short pieces of code, so while the
> lookup cost is generally low, the cost of the lookup is far
> higher than the cost of the operation we are doing on the
> perag.
>
> Since we changed buffers to hold references to the perag
> they are cached in, many modification contexts already hold
> active references to the perag that are held across these
> operations. This is especially true for any operation that
> is serialised by an allocation group header buffer.
>
> In these cases, we can just use the buffer's reference to
> the perag to avoid needing to do lookups to access the
> perag. This means that many operations don't need to do
> perag lookups at all to access the perag because they've
> already looked up objects that own persistent references
> and hence can use that reference instead.
>
> Cc: Dave Chinner <dchinner@redhat.com>
> Cc: "Darrick J. Wong" <darrick.wong@oracle.com>
> Signed-off-by: Gao Xiang <hsiangkao@redhat.com>
> ---
> changes since v1:
> - update the commit message suggested by Dave;
> - fold in all corresponding ASSERTs I made;
Ok, I think we had a small misunderstanding there. I was trying to
say the asserts that were in the first patch were fine, but we
didn't really need any more because the new asserts mostly matched
an existing pattern.
I wasn't suggesting that we do this everywhere:
> diff --git a/fs/xfs/libxfs/xfs_ag.c b/fs/xfs/libxfs/xfs_ag.c
> index 9d84007a5c65..4b8c7cb87b84 100644
> --- a/fs/xfs/libxfs/xfs_ag.c
> +++ b/fs/xfs/libxfs/xfs_ag.c
> @@ -563,7 +563,9 @@ xfs_ag_get_geometry(
> error = xfs_alloc_read_agf(mp, NULL, agno, 0, &agf_bp);
> if (error)
> goto out_agi;
> - pag = xfs_perag_get(mp, agno);
> +
> + pag = agi_bp->b_pag;
> + ASSERT(pag->pag_agno == agno);
.... because we've already checked this in xfs_ialloc_read_agi() a
few lines of code back up the function.
That's the pattern I was refering to - we tend to check
relationships when they are first brought into a context, then we
don't need to check them again in that context. Hence the asserts
in xfs_ialloc_read_agi() and xfs_alloc_read_agf() effectively cover
all the places where we pull the pag from those buffers, and so
there's no need to validate the correct perag is attached to the
buffer every time we access it....
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
next prev parent reply other threads:[~2020-06-04 21:59 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-02 14:52 [PATCH] xfs: get rid of unnecessary xfs_perag_{get,put} pairs Gao Xiang
2020-06-03 0:22 ` Darrick J. Wong
2020-06-03 0:44 ` Dave Chinner
2020-06-03 0:48 ` Darrick J. Wong
2020-06-03 0:49 ` Gao Xiang
2020-06-03 1:27 ` Dave Chinner
2020-06-03 1:40 ` Gao Xiang
2020-06-03 3:02 ` Dave Chinner
2020-06-03 3:19 ` Gao Xiang
2020-06-03 12:11 ` [PATCH v2] " Gao Xiang
2020-06-04 21:59 ` Dave Chinner [this message]
2020-06-05 1:44 ` Gao Xiang
2020-06-05 8:52 ` [PATCH v3] " Gao Xiang
2020-06-05 15:56 ` Darrick J. Wong
2020-06-05 18:30 ` Gao Xiang
2020-06-05 18:47 ` Gao Xiang
2020-06-23 10:08 ` Gao Xiang
2020-07-13 8:53 ` [PATCH v4] " Gao Xiang
2020-07-13 16:12 ` 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=20200604215917.GS2040@dread.disaster.area \
--to=david@fromorbit.com \
--cc=darrick.wong@oracle.com \
--cc=dchinner@redhat.com \
--cc=hsiangkao@redhat.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.