All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Carlos Maiolino <cem@kernel.org>,
	"Cc : Hans Holmberg" <hans.holmberg@wdc.com>,
	linux-xfs@vger.kernel.org
Subject: Re: [PATCH 1/2] xfs: add a separate bio_set for spliting GC writes
Date: Tue, 28 Jul 2026 08:27:29 -0700	[thread overview]
Message-ID: <20260728152729.GO2901224@frogsfrogsfrogs> (raw)
In-Reply-To: <20260728080650.1777545-2-hch@lst.de>

On Tue, Jul 28, 2026 at 10:06:44AM +0200, Christoph Hellwig wrote:
> Allocating the new bio for a split from the same pool as the original
> one can deadlock under memory pressure.  Add a separate pool for
> splitting GC write bios to avoid this.
> 
> Fixes: 080d01c41d44 ("xfs: implement zoned garbage collection")
> Signed-off-by: Christoph Hellwig <hch@lst.de>

Seems fine to me...
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>

--D

> ---
>  fs/xfs/xfs_zone_gc.c | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/xfs/xfs_zone_gc.c b/fs/xfs/xfs_zone_gc.c
> index f76a09130852..e4f70e024632 100644
> --- a/fs/xfs/xfs_zone_gc.c
> +++ b/fs/xfs/xfs_zone_gc.c
> @@ -130,6 +130,9 @@ struct xfs_zone_gc_data {
>  	/* bioset used to allocate the gc_bios */
>  	struct bio_set			bio_set;
>  
> +	/* bioset used when writes need to be split to hardware limits */
> +	struct bio_set			split_bio_set;
> +
>  	/*
>  	 * Scratchpad to buffer GC data, organized as a ring buffer over
>  	 * discontiguous folios.  scratch_head is where the buffer is filled,
> @@ -221,6 +224,9 @@ xfs_zone_gc_data_alloc(
>  	if (bioset_init(&data->bio_set, 16, offsetof(struct xfs_gc_bio, bio),
>  			BIOSET_NEED_BVECS))
>  		goto out_free_recs;
> +	if (bioset_init(&data->split_bio_set, 16,
> +			offsetof(struct xfs_gc_bio, bio), 0))
> +		goto out_exit_bio_set;
>  	for (i = 0; i < XFS_GC_NR_BUFS; i++) {
>  		data->scratch_folios[i] =
>  			folio_alloc(GFP_KERNEL, get_order(XFS_GC_BUF_SIZE));
> @@ -238,6 +244,8 @@ xfs_zone_gc_data_alloc(
>  out_free_scratch:
>  	while (--i >= 0)
>  		folio_put(data->scratch_folios[i]);
> +	bioset_exit(&data->split_bio_set);
> +out_exit_bio_set:
>  	bioset_exit(&data->bio_set);
>  out_free_recs:
>  	kfree(data->iter.recs);
> @@ -254,6 +262,7 @@ xfs_zone_gc_data_free(
>  
>  	for (i = 0; i < XFS_GC_NR_BUFS; i++)
>  		folio_put(data->scratch_folios[i]);
> +	bioset_exit(&data->split_bio_set);
>  	bioset_exit(&data->bio_set);
>  	kfree(data->iter.recs);
>  	kfree(data);
> @@ -810,7 +819,8 @@ xfs_zone_gc_split_write(
>  			data->mp->m_sb.sb_blocksize) >> SECTOR_SHIFT;
>  	split_len = split_sectors << SECTOR_SHIFT;
>  
> -	split = bio_split(&chunk->bio, split_sectors, GFP_NOFS, &data->bio_set);
> +	split = bio_split(&chunk->bio, split_sectors, GFP_NOFS,
> +			&data->split_bio_set);
>  	split_chunk = container_of(split, struct xfs_gc_bio, bio);
>  	split_chunk->data = data;
>  	ihold(VFS_I(chunk->ip));
> -- 
> 2.53.0
> 
> 

  reply	other threads:[~2026-07-28 15:27 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-28  8:06 zoned GC fix Christoph Hellwig
2026-07-28  8:06 ` [PATCH 1/2] xfs: add a separate bio_set for spliting GC writes Christoph Hellwig
2026-07-28 15:27   ` Darrick J. Wong [this message]
2026-07-29  4:07   ` Damien Le Moal
2026-07-28  8:06 ` [PATCH 2/2] xfs: add a comment to describe xfs_gc_bio.victim_rtg Christoph Hellwig
2026-07-28 15:27   ` Darrick J. Wong
2026-07-29  4:05   ` Damien Le Moal

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=20260728152729.GO2901224@frogsfrogsfrogs \
    --to=djwong@kernel.org \
    --cc=cem@kernel.org \
    --cc=hans.holmberg@wdc.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 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.