linux-xfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: linux-xfs@vger.kernel.org
Cc: john.g.garry@oracle.com
Subject: [PATCH 5/9] xfs: aligned EOF allocations don't need to scan AGs anymore
Date: Wed,  4 Oct 2023 11:19:39 +1100	[thread overview]
Message-ID: <20231004001943.349265-6-david@fromorbit.com> (raw)
In-Reply-To: <20231004001943.349265-1-david@fromorbit.com>

From: Dave Chinner <dchinner@redhat.com>

Now that contiguous free space selection takes into account stripe
alignment, we no longer need to do an "all AGs" allocation scan in
the case the initial AG doesn't have enough contiguous free space
for a stripe aligned allocation. This cleans up
xfs_bmap_btalloc_aligned() the same for both filestreams and the
normal btree allocation code.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
---
 fs/xfs/libxfs/xfs_bmap.c | 40 +++++++++++++---------------------------
 1 file changed, 13 insertions(+), 27 deletions(-)

diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
index 3c250c89f42e..c1e2c0707e20 100644
--- a/fs/xfs/libxfs/xfs_bmap.c
+++ b/fs/xfs/libxfs/xfs_bmap.c
@@ -3538,10 +3538,8 @@ xfs_bmap_btalloc_aligned(
 	struct xfs_bmalloca	*ap,
 	struct xfs_alloc_arg	*args,
 	xfs_extlen_t		blen,
-	int			stripe_align,
-	bool			ag_only)
+	int			stripe_align)
 {
-	struct xfs_perag        *caller_pag = args->pag;
 	int			error;
 
 	/*
@@ -3558,14 +3556,7 @@ xfs_bmap_btalloc_aligned(
 	args->alignment = stripe_align;
 	args->minalignslop = 0;
 
-	if (ag_only) {
-		error = xfs_alloc_vextent_near_bno(args, ap->blkno);
-	} else {
-		args->pag = NULL;
-		error = xfs_alloc_vextent_start_ag(args, ap->blkno);
-		ASSERT(args->pag == NULL);
-		args->pag = caller_pag;
-	}
+	error = xfs_alloc_vextent_near_bno(args, ap->blkno);
 	if (error)
 		return error;
 
@@ -3650,8 +3641,7 @@ xfs_bmap_btalloc_filestreams(
 		goto out_low_space;
 
 	if (ap->aeof)
-		error = xfs_bmap_btalloc_aligned(ap, args, blen, stripe_align,
-				true);
+		error = xfs_bmap_btalloc_aligned(ap, args, blen, stripe_align);
 
 	if (!error && args->fsbno == NULLFSBLOCK)
 		error = xfs_alloc_vextent_near_bno(args, ap->blkno);
@@ -3715,9 +3705,16 @@ xfs_bmap_btalloc_best_length(
 		return error;
 	ASSERT(args->pag);
 
-	if (ap->aeof && ap->offset) {
+	if (ap->aeof && ap->offset)
 		error = xfs_bmap_btalloc_at_eof(ap, args, blen, stripe_align);
-	}
+
+	if (error || args->fsbno != NULLFSBLOCK)
+		goto out_perag_rele;
+
+
+	/* attempt aligned allocation for new EOF extents */
+	if (stripe_align)
+		error = xfs_bmap_btalloc_aligned(ap, args, blen, stripe_align);
 
 	/*
 	 * We are now done with the perag reference for the optimal allocation
@@ -3725,24 +3722,13 @@ xfs_bmap_btalloc_best_length(
 	 * now as we've either succeeded, had a fatal error or we are out of
 	 * space and need to do a full filesystem scan for free space which will
 	 * take it's own references.
-	 *
-	 * XXX: now that xfs_bmap_btalloc_select_lengths() selects an AG with
-	 * enough contiguous free space in it for an aligned allocation, we
-	 * can change the aligned allocation at EOF to just be a single AG
-	 * allocation.
 	 */
+out_perag_rele:
 	xfs_perag_rele(args->pag);
 	args->pag = NULL;
 	if (error || args->fsbno != NULLFSBLOCK)
 		return error;
 
-	/* attempt aligned allocation for new EOF extents */
-	if (stripe_align)
-		error = xfs_bmap_btalloc_aligned(ap, args, blen, stripe_align,
-				false);
-	if (error || args->fsbno != NULLFSBLOCK)
-		return error;
-
 	/* attempt unaligned allocation */
 	error = xfs_alloc_vextent_start_ag(args, ap->blkno);
 	if (error || args->fsbno != NULLFSBLOCK)
-- 
2.40.1


  parent reply	other threads:[~2023-10-04  0:19 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-04  0:19 [RFC PATCH 0/9] xfs: push perags further into allocation routines Dave Chinner
2023-10-04  0:19 ` [PATCH 1/9] xfs: split xfs_bmap_btalloc_at_eof() Dave Chinner
2023-10-04 23:41   ` Darrick J. Wong
2023-10-05  9:41   ` Christoph Hellwig
2023-10-04  0:19 ` [PATCH 2/9] xfs: contiguous EOF allocation across AGs Dave Chinner
2023-10-05  9:43   ` Christoph Hellwig
2023-10-06  5:27   ` Darrick J. Wong
2023-10-04  0:19 ` [PATCH 3/9] xfs: select the AG with the largest contiguous space Dave Chinner
2023-10-05  9:45   ` Christoph Hellwig
2023-10-05  9:46   ` Christoph Hellwig
2023-10-24 16:25     ` Darrick J. Wong
2023-10-04  0:19 ` [PATCH 4/9] xfs: push the perag outwards in initial allocation Dave Chinner
2023-10-05 11:57   ` Christoph Hellwig
2023-10-04  0:19 ` Dave Chinner [this message]
2023-10-05 11:59   ` [PATCH 5/9] xfs: aligned EOF allocations don't need to scan AGs anymore Christoph Hellwig
2023-10-06  5:55   ` Darrick J. Wong
2023-10-04  0:19 ` [PATCH 6/9] xfs: use agno/agbno in xfs_alloc_vextent functions Dave Chinner
2023-10-05 12:02   ` Christoph Hellwig
2023-10-06  5:56   ` Darrick J. Wong
2023-10-04  0:19 ` [PATCH 7/9] xfs: caller perag always supplied to xfs_alloc_vextent_near_bno Dave Chinner
2023-10-05 12:02   ` Christoph Hellwig
2023-10-06  5:59   ` Darrick J. Wong
2023-10-04  0:19 ` [PATCH 8/9] xfs: collapse near and exact bno allocation Dave Chinner
2023-10-05 12:03   ` Christoph Hellwig
2023-10-06  6:01   ` Darrick J. Wong
2023-10-04  0:19 ` [PATCH 9/9] xfs: return -ENOSPC rather than NULLFSBLOCK from allocation functions Dave Chinner
2023-10-05 12:21   ` Christoph Hellwig

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=20231004001943.349265-6-david@fromorbit.com \
    --to=david@fromorbit.com \
    --cc=john.g.garry@oracle.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 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).