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
>
>
next prev parent 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.