From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Brian Foster <bfoster@redhat.com>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH v3 1/4] xfs: track active state of allocation btree cursors
Date: Fri, 16 Aug 2019 17:51:49 -0700 [thread overview]
Message-ID: <20190817005149.GA752159@magnolia> (raw)
In-Reply-To: <20190815125538.49570-2-bfoster@redhat.com>
On Thu, Aug 15, 2019 at 08:55:35AM -0400, Brian Foster wrote:
> The upcoming allocation algorithm update searches multiple
> allocation btree cursors concurrently. As such, it requires an
> active state to track when a particular cursor should continue
> searching. While active state will be modified based on higher level
> logic, we can define base functionality based on the result of
> allocation btree lookups.
>
> Define an active flag in the private area of the btree cursor.
> Update it based on the result of lookups in the existing allocation
> btree helpers. Finally, provide a new helper to query the current
> state.
>
> Signed-off-by: Brian Foster <bfoster@redhat.com>
> ---
> fs/xfs/libxfs/xfs_alloc.c | 24 +++++++++++++++++++++---
> fs/xfs/libxfs/xfs_alloc_btree.c | 1 +
> fs/xfs/libxfs/xfs_btree.h | 3 +++
> 3 files changed, 25 insertions(+), 3 deletions(-)
>
> diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c
> index 372ad55631fc..6340f59ac3f4 100644
> --- a/fs/xfs/libxfs/xfs_alloc.c
> +++ b/fs/xfs/libxfs/xfs_alloc.c
> @@ -146,9 +146,13 @@ xfs_alloc_lookup_eq(
> xfs_extlen_t len, /* length of extent */
> int *stat) /* success/failure */
> {
> + int error;
> +
> cur->bc_rec.a.ar_startblock = bno;
> cur->bc_rec.a.ar_blockcount = len;
> - return xfs_btree_lookup(cur, XFS_LOOKUP_EQ, stat);
> + error = xfs_btree_lookup(cur, XFS_LOOKUP_EQ, stat);
> + cur->bc_private.a.priv.abt.active = *stat;
<urk> Not really a fan of mixing types (even if they are bool and int),
how hard would it be to convert some of these *stat to bool?
Does abt.active have a use outside of the struct xfs_alloc_cur in the
next patch?
--D
> + return error;
> }
>
> /*
> @@ -162,9 +166,13 @@ xfs_alloc_lookup_ge(
> xfs_extlen_t len, /* length of extent */
> int *stat) /* success/failure */
> {
> + int error;
> +
> cur->bc_rec.a.ar_startblock = bno;
> cur->bc_rec.a.ar_blockcount = len;
> - return xfs_btree_lookup(cur, XFS_LOOKUP_GE, stat);
> + error = xfs_btree_lookup(cur, XFS_LOOKUP_GE, stat);
> + cur->bc_private.a.priv.abt.active = *stat;
> + return error;
> }
>
> /*
> @@ -178,9 +186,19 @@ xfs_alloc_lookup_le(
> xfs_extlen_t len, /* length of extent */
> int *stat) /* success/failure */
> {
> + int error;
> cur->bc_rec.a.ar_startblock = bno;
> cur->bc_rec.a.ar_blockcount = len;
> - return xfs_btree_lookup(cur, XFS_LOOKUP_LE, stat);
> + error = xfs_btree_lookup(cur, XFS_LOOKUP_LE, stat);
> + cur->bc_private.a.priv.abt.active = *stat;
> + return error;
> +}
> +
> +static inline bool
> +xfs_alloc_cur_active(
> + struct xfs_btree_cur *cur)
> +{
> + return cur && cur->bc_private.a.priv.abt.active;
> }
>
> /*
> diff --git a/fs/xfs/libxfs/xfs_alloc_btree.c b/fs/xfs/libxfs/xfs_alloc_btree.c
> index 2a94543857a1..279694d73e4e 100644
> --- a/fs/xfs/libxfs/xfs_alloc_btree.c
> +++ b/fs/xfs/libxfs/xfs_alloc_btree.c
> @@ -507,6 +507,7 @@ xfs_allocbt_init_cursor(
>
> cur->bc_private.a.agbp = agbp;
> cur->bc_private.a.agno = agno;
> + cur->bc_private.a.priv.abt.active = false;
>
> if (xfs_sb_version_hascrc(&mp->m_sb))
> cur->bc_flags |= XFS_BTREE_CRC_BLOCKS;
> diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h
> index fa3cd8ab9aba..a66063c356cc 100644
> --- a/fs/xfs/libxfs/xfs_btree.h
> +++ b/fs/xfs/libxfs/xfs_btree.h
> @@ -183,6 +183,9 @@ union xfs_btree_cur_private {
> unsigned long nr_ops; /* # record updates */
> int shape_changes; /* # of extent splits */
> } refc;
> + struct {
> + bool active; /* allocation cursor state */
> + } abt;
> };
>
> /*
> --
> 2.20.1
>
next prev parent reply other threads:[~2019-08-17 0:52 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-15 12:55 [PATCH v3 0/4] xfs: rework near mode extent allocation Brian Foster
2019-08-15 12:55 ` [PATCH v3 1/4] xfs: track active state of allocation btree cursors Brian Foster
2019-08-17 0:51 ` Darrick J. Wong [this message]
2019-08-19 18:03 ` Brian Foster
2019-08-15 12:55 ` [PATCH v3 2/4] xfs: use locality optimized cntbt lookups for near mode allocations Brian Foster
2019-08-17 1:34 ` Darrick J. Wong
2019-08-19 18:06 ` Brian Foster
2019-08-15 12:55 ` [PATCH v3 3/4] xfs: randomly fall back to near mode lookup algorithm in debug mode Brian Foster
2019-08-17 1:37 ` Darrick J. Wong
2019-08-19 18:19 ` Brian Foster
2019-08-15 12:55 ` [PATCH v3 4/4] xfs: refactor successful AG allocation accounting code Brian Foster
2019-08-17 0:28 ` 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=20190817005149.GA752159@magnolia \
--to=darrick.wong@oracle.com \
--cc=bfoster@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.