From: Brian Foster <bfoster@redhat.com>
To: "Darrick J. Wong" <djwong@kernel.org>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH v3 1/2] xfs: set a mount flag when perag reservation is active
Date: Tue, 20 Apr 2021 12:23:36 -0400 [thread overview]
Message-ID: <YH8ACPCvrMsMjnvG@bfoster> (raw)
In-Reply-To: <20210414004950.GW3957620@magnolia>
On Tue, Apr 13, 2021 at 05:49:50PM -0700, Darrick J. Wong wrote:
> On Mon, Apr 12, 2021 at 09:30:58AM -0400, Brian Foster wrote:
> > perag reservation is enabled at mount time on a per AG basis. The
> > upcoming in-core allocation btree accounting mechanism needs to know
> > when reservation is enabled and that all perag AGF contexts are
> > initialized. As a preparation step, set a flag in the mount
> > structure and unconditionally initialize the pagf on all mounts
> > where at least one reservation is active.
> >
> > Signed-off-by: Brian Foster <bfoster@redhat.com>
> > ---
> > fs/xfs/libxfs/xfs_ag_resv.c | 24 ++++++++++++++----------
> > fs/xfs/xfs_mount.h | 1 +
> > 2 files changed, 15 insertions(+), 10 deletions(-)
> >
> > diff --git a/fs/xfs/libxfs/xfs_ag_resv.c b/fs/xfs/libxfs/xfs_ag_resv.c
> > index 6c5f8d10589c..9b2fc4abad2c 100644
> > --- a/fs/xfs/libxfs/xfs_ag_resv.c
> > +++ b/fs/xfs/libxfs/xfs_ag_resv.c
> > @@ -254,6 +254,7 @@ xfs_ag_resv_init(
> > xfs_extlen_t ask;
> > xfs_extlen_t used;
> > int error = 0;
> > + bool has_resv = false;
> >
> > /* Create the metadata reservation. */
> > if (pag->pag_meta_resv.ar_asked == 0) {
> > @@ -291,6 +292,8 @@ xfs_ag_resv_init(
> > if (error)
> > goto out;
> > }
> > + if (ask)
> > + has_resv = true;
> > }
> >
> > /* Create the RMAPBT metadata reservation */
> > @@ -304,18 +307,19 @@ xfs_ag_resv_init(
> > error = __xfs_ag_resv_init(pag, XFS_AG_RESV_RMAPBT, ask, used);
> > if (error)
> > goto out;
> > + if (ask)
> > + has_resv = true;
> > }
> >
> > -#ifdef DEBUG
> > - /* need to read in the AGF for the ASSERT below to work */
> > - error = xfs_alloc_pagf_init(pag->pag_mount, tp, pag->pag_agno, 0);
> > - if (error)
> > - return error;
> > -
> > - ASSERT(xfs_perag_resv(pag, XFS_AG_RESV_METADATA)->ar_reserved +
> > - xfs_perag_resv(pag, XFS_AG_RESV_RMAPBT)->ar_reserved <=
> > - pag->pagf_freeblks + pag->pagf_flcount);
> > -#endif
> > + if (has_resv) {
> > + mp->m_has_agresv = true;
>
> If the metadata reservation succeeds but the rmapbt reservation fails
> with ENOSPC, won't we fail to set m_has_agresv true here? We don't fail
> the entire mount if ENOSPC happens, which means that there's a slight
> chance of doing the wrong thing here if all the AGs are (somehow) like
> that.
>
Yes it looks like we would skip setting the mount flag (and initializing
the pagf). I suppose we should probably just lift the out label up
before this whole branch.
Brian
> --D
>
> > + error = xfs_alloc_pagf_init(mp, tp, pag->pag_agno, 0);
> > + if (error)
> > + return error;
> > + ASSERT(xfs_perag_resv(pag, XFS_AG_RESV_METADATA)->ar_reserved +
> > + xfs_perag_resv(pag, XFS_AG_RESV_RMAPBT)->ar_reserved <=
> > + pag->pagf_freeblks + pag->pagf_flcount);
> > + }
> > out:
> > return error;
> > }
> > diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h
> > index 81829d19596e..8847ffd29777 100644
> > --- a/fs/xfs/xfs_mount.h
> > +++ b/fs/xfs/xfs_mount.h
> > @@ -139,6 +139,7 @@ typedef struct xfs_mount {
> > bool m_fail_unmount;
> > bool m_finobt_nores; /* no per-AG finobt resv. */
> > bool m_update_sb; /* sb needs update in mount */
> > + bool m_has_agresv; /* perag reservations active */
> >
> > /*
> > * Bitsets of per-fs metadata that have been checked and/or are sick.
> > --
> > 2.26.3
> >
>
next prev parent reply other threads:[~2021-04-20 16:23 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-12 13:30 [PATCH v3 REPOST 0/2] xfs: set aside allocation btree blocks from block reservation Brian Foster
2021-04-12 13:30 ` [PATCH v3 1/2] xfs: set a mount flag when perag reservation is active Brian Foster
2021-04-14 0:49 ` Darrick J. Wong
2021-04-20 16:22 ` Brian Foster
2021-04-20 16:23 ` Brian Foster [this message]
2021-04-12 13:30 ` [PATCH v3 2/2] xfs: set aside allocation btree blocks from block reservation Brian Foster
2021-04-12 22:21 ` kernel test robot
2021-04-12 22:21 ` kernel test robot
2021-04-14 0:41 ` Darrick J. Wong
2021-04-14 0:41 ` Darrick J. Wong
2021-04-19 0:59 ` [kbuild-all] " Chen, Rong A
2021-04-19 0:59 ` Chen, Rong A
2021-04-19 16:10 ` [kbuild-all] " Darrick J. Wong
2021-04-19 16:10 ` Darrick J. Wong
2021-04-14 1:00 ` Darrick J. Wong
2021-04-20 16:24 ` Brian Foster
2021-04-21 23:40 ` Darrick J. Wong
2021-04-22 12:41 ` Brian Foster
-- strict thread matches above, loose matches on Subject: below --
2021-03-18 16:17 [PATCH v3 0/2] " Brian Foster
2021-03-18 16:17 ` [PATCH v3 1/2] xfs: set a mount flag when perag reservation is active Brian Foster
2021-03-18 20:55 ` Dave Chinner
2021-03-18 22:19 ` Darrick J. Wong
2021-03-19 1:05 ` Dave Chinner
2021-03-19 1:34 ` Darrick J. Wong
2021-03-19 14:54 ` Brian Foster
2021-03-19 1:43 ` Dave Chinner
2021-03-19 1:48 ` Darrick J. Wong
2021-03-19 2:08 ` Dave Chinner
2021-03-19 14:54 ` Brian Foster
2021-03-23 22:40 ` Dave Chinner
2021-03-24 14:24 ` Brian Foster
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=YH8ACPCvrMsMjnvG@bfoster \
--to=bfoster@redhat.com \
--cc=djwong@kernel.org \
--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.