From: "Darrick J. Wong" <djwong@kernel.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Carlos Maiolino <cem@kernel.org>,
Hans Holmberg <hans.holmberg@wdc.com>,
linux-xfs@vger.kernel.org
Subject: Re: [PATCH 3/7] xfs: rename oz_write_pointer to oz_allocated
Date: Wed, 16 Jul 2025 08:58:50 -0700 [thread overview]
Message-ID: <20250716155850.GJ2672049@frogsfrogsfrogs> (raw)
In-Reply-To: <20250716125413.2148420-4-hch@lst.de>
On Wed, Jul 16, 2025 at 02:54:03PM +0200, Christoph Hellwig wrote:
> This member just tracks how much space we handed out for sequential
> write required zones. Only for conventional space it actually is the
> pointer where thing are written at, otherwise zone append manages
> that.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> fs/xfs/xfs_trace.h | 8 ++++----
> fs/xfs/xfs_zone_alloc.c | 18 +++++++++---------
> fs/xfs/xfs_zone_gc.c | 13 ++++++-------
> fs/xfs/xfs_zone_info.c | 2 +-
> fs/xfs/xfs_zone_priv.h | 16 ++++++++--------
> 5 files changed, 28 insertions(+), 29 deletions(-)
>
> diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h
> index 6addebd764b0..10d4fd671dcf 100644
> --- a/fs/xfs/xfs_trace.h
> +++ b/fs/xfs/xfs_trace.h
> @@ -425,8 +425,8 @@ DECLARE_EVENT_CLASS(xfs_zone_alloc_class,
> __field(dev_t, dev)
> __field(xfs_rgnumber_t, rgno)
> __field(xfs_rgblock_t, used)
> + __field(xfs_rgblock_t, allocated)
> __field(xfs_rgblock_t, written)
> - __field(xfs_rgblock_t, write_pointer)
> __field(xfs_rgblock_t, rgbno)
> __field(xfs_extlen_t, len)
> ),
> @@ -434,17 +434,17 @@ DECLARE_EVENT_CLASS(xfs_zone_alloc_class,
> __entry->dev = rtg_mount(oz->oz_rtg)->m_super->s_dev;
> __entry->rgno = rtg_rgno(oz->oz_rtg);
> __entry->used = rtg_rmap(oz->oz_rtg)->i_used_blocks;
> + __entry->allocated = oz->oz_allocated;
> __entry->written = oz->oz_written;
> - __entry->write_pointer = oz->oz_write_pointer;
> __entry->rgbno = rgbno;
> __entry->len = len;
> ),
> - TP_printk("dev %d:%d rgno 0x%x used 0x%x written 0x%x wp 0x%x rgbno 0x%x len 0x%x",
> + TP_printk("dev %d:%d rgno 0x%x used 0x%x alloced 0x%x written 0x%x rgbno 0x%x len 0x%x",
Looks fine though I'd prefer this be the full word ^^^ "allocated"
With that changed,
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
--D
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->rgno,
> __entry->used,
> + __entry->allocated,
> __entry->written,
> - __entry->write_pointer,
> __entry->rgbno,
> __entry->len)
> );
> diff --git a/fs/xfs/xfs_zone_alloc.c b/fs/xfs/xfs_zone_alloc.c
> index 867465b5b5fe..729d80ff52c1 100644
> --- a/fs/xfs/xfs_zone_alloc.c
> +++ b/fs/xfs/xfs_zone_alloc.c
> @@ -434,7 +434,7 @@ xfs_init_open_zone(
> spin_lock_init(&oz->oz_alloc_lock);
> atomic_set(&oz->oz_ref, 1);
> oz->oz_rtg = rtg;
> - oz->oz_write_pointer = write_pointer;
> + oz->oz_allocated = write_pointer;
> oz->oz_written = write_pointer;
> oz->oz_write_hint = write_hint;
> oz->oz_is_gc = is_gc;
> @@ -569,7 +569,7 @@ xfs_try_use_zone(
> struct xfs_open_zone *oz,
> bool lowspace)
> {
> - if (oz->oz_write_pointer == rtg_blocks(oz->oz_rtg))
> + if (oz->oz_allocated == rtg_blocks(oz->oz_rtg))
> return false;
> if (!lowspace && !xfs_good_hint_match(oz, file_hint))
> return false;
> @@ -744,25 +744,25 @@ xfs_zone_alloc_blocks(
> {
> struct xfs_rtgroup *rtg = oz->oz_rtg;
> struct xfs_mount *mp = rtg_mount(rtg);
> - xfs_rgblock_t rgbno;
> + xfs_rgblock_t allocated;
>
> spin_lock(&oz->oz_alloc_lock);
> count_fsb = min3(count_fsb, XFS_MAX_BMBT_EXTLEN,
> - (xfs_filblks_t)rtg_blocks(rtg) - oz->oz_write_pointer);
> + (xfs_filblks_t)rtg_blocks(rtg) - oz->oz_allocated);
> if (!count_fsb) {
> spin_unlock(&oz->oz_alloc_lock);
> return 0;
> }
> - rgbno = oz->oz_write_pointer;
> - oz->oz_write_pointer += count_fsb;
> + allocated = oz->oz_allocated;
> + oz->oz_allocated += count_fsb;
> spin_unlock(&oz->oz_alloc_lock);
>
> - trace_xfs_zone_alloc_blocks(oz, rgbno, count_fsb);
> + trace_xfs_zone_alloc_blocks(oz, allocated, count_fsb);
>
> *sector = xfs_gbno_to_daddr(&rtg->rtg_group, 0);
> *is_seq = bdev_zone_is_seq(mp->m_rtdev_targp->bt_bdev, *sector);
> if (!*is_seq)
> - *sector += XFS_FSB_TO_BB(mp, rgbno);
> + *sector += XFS_FSB_TO_BB(mp, allocated);
> return XFS_FSB_TO_B(mp, count_fsb);
> }
>
> @@ -983,7 +983,7 @@ xfs_zone_rgbno_is_valid(
> lockdep_assert_held(&rtg_rmap(rtg)->i_lock);
>
> if (rtg->rtg_open_zone)
> - return rgbno < rtg->rtg_open_zone->oz_write_pointer;
> + return rgbno < rtg->rtg_open_zone->oz_allocated;
> return !xa_get_mark(&rtg_mount(rtg)->m_groups[XG_TYPE_RTG].xa,
> rtg_rgno(rtg), XFS_RTG_FREE);
> }
> diff --git a/fs/xfs/xfs_zone_gc.c b/fs/xfs/xfs_zone_gc.c
> index 9c00fc5baa30..7ea9fa77b061 100644
> --- a/fs/xfs/xfs_zone_gc.c
> +++ b/fs/xfs/xfs_zone_gc.c
> @@ -533,8 +533,7 @@ xfs_zone_gc_steal_open(
>
> spin_lock(&zi->zi_open_zones_lock);
> list_for_each_entry(oz, &zi->zi_open_zones, oz_entry) {
> - if (!found ||
> - oz->oz_write_pointer < found->oz_write_pointer)
> + if (!found || oz->oz_allocated < found->oz_allocated)
> found = oz;
> }
>
> @@ -584,7 +583,7 @@ xfs_zone_gc_ensure_target(
> {
> struct xfs_open_zone *oz = mp->m_zone_info->zi_open_gc_zone;
>
> - if (!oz || oz->oz_write_pointer == rtg_blocks(oz->oz_rtg))
> + if (!oz || oz->oz_allocated == rtg_blocks(oz->oz_rtg))
> return xfs_zone_gc_select_target(mp);
> return oz;
> }
> @@ -605,7 +604,7 @@ xfs_zone_gc_space_available(
> oz = xfs_zone_gc_ensure_target(data->mp);
> if (!oz)
> return false;
> - return oz->oz_write_pointer < rtg_blocks(oz->oz_rtg) &&
> + return oz->oz_allocated < rtg_blocks(oz->oz_rtg) &&
> xfs_zone_gc_scratch_available(data);
> }
>
> @@ -647,7 +646,7 @@ xfs_zone_gc_alloc_blocks(
> */
> spin_lock(&mp->m_sb_lock);
> *count_fsb = min(*count_fsb,
> - rtg_blocks(oz->oz_rtg) - oz->oz_write_pointer);
> + rtg_blocks(oz->oz_rtg) - oz->oz_allocated);
> *count_fsb = min3(*count_fsb,
> mp->m_free[XC_FREE_RTEXTENTS].res_avail,
> mp->m_free[XC_FREE_RTAVAILABLE].res_avail);
> @@ -661,8 +660,8 @@ xfs_zone_gc_alloc_blocks(
> *daddr = xfs_gbno_to_daddr(&oz->oz_rtg->rtg_group, 0);
> *is_seq = bdev_zone_is_seq(mp->m_rtdev_targp->bt_bdev, *daddr);
> if (!*is_seq)
> - *daddr += XFS_FSB_TO_BB(mp, oz->oz_write_pointer);
> - oz->oz_write_pointer += *count_fsb;
> + *daddr += XFS_FSB_TO_BB(mp, oz->oz_allocated);
> + oz->oz_allocated += *count_fsb;
> atomic_inc(&oz->oz_ref);
> return oz;
> }
> diff --git a/fs/xfs/xfs_zone_info.c b/fs/xfs/xfs_zone_info.c
> index 733bcc2f8645..07e30c596975 100644
> --- a/fs/xfs/xfs_zone_info.c
> +++ b/fs/xfs/xfs_zone_info.c
> @@ -32,7 +32,7 @@ xfs_show_open_zone(
> {
> seq_printf(m, "\t zone %d, wp %u, written %u, used %u, hint %s\n",
> rtg_rgno(oz->oz_rtg),
> - oz->oz_write_pointer, oz->oz_written,
> + oz->oz_allocated, oz->oz_written,
> rtg_rmap(oz->oz_rtg)->i_used_blocks,
> xfs_write_hint_to_str(oz->oz_write_hint));
> }
> diff --git a/fs/xfs/xfs_zone_priv.h b/fs/xfs/xfs_zone_priv.h
> index ab696975a993..35e6de3d25ed 100644
> --- a/fs/xfs/xfs_zone_priv.h
> +++ b/fs/xfs/xfs_zone_priv.h
> @@ -11,18 +11,18 @@ struct xfs_open_zone {
> atomic_t oz_ref;
>
> /*
> - * oz_write_pointer is the write pointer at which space is handed out
> - * for conventional zones, or simple the count of blocks handed out
> - * so far for sequential write required zones and is protected by
> - * oz_alloc_lock/
> + * oz_allocated is the amount of space already allocated out of the zone
> + * and is protected by oz_alloc_lock.
> + *
> + * For conventional zones it also is the offset of the next write.
> */
> spinlock_t oz_alloc_lock;
> - xfs_rgblock_t oz_write_pointer;
> + xfs_rgblock_t oz_allocated;
>
> /*
> - * oz_written is the number of blocks for which we've received a
> - * write completion. oz_written must always be <= oz_write_pointer
> - * and is protected by the ILOCK of the rmap inode.
> + * oz_written is the number of blocks for which we've received a write
> + * completion. oz_written must always be <= oz_allocated and is
> + * protected by the ILOCK of the rmap inode.
> */
> xfs_rgblock_t oz_written;
>
> --
> 2.47.2
>
>
next prev parent reply other threads:[~2025-07-16 15:58 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-16 12:54 misc zoned allocators fixes and cleanups Christoph Hellwig
2025-07-16 12:54 ` [PATCH 1/7] xfs: don't allocate the xfs_extent_busy structure for zoned RTGs Christoph Hellwig
2025-07-16 15:50 ` Darrick J. Wong
2025-07-17 8:11 ` Carlos Maiolino
2025-07-16 12:54 ` [PATCH 2/7] xfs: use a uint32_t to cache i_used_blocks in xfs_init_zone Christoph Hellwig
2025-07-16 15:51 ` Darrick J. Wong
2025-07-16 12:54 ` [PATCH 3/7] xfs: rename oz_write_pointer to oz_allocated Christoph Hellwig
2025-07-16 15:58 ` Darrick J. Wong [this message]
2025-07-16 12:54 ` [PATCH 4/7] xfs: stop passing an inode to the zone space reservation helpers Christoph Hellwig
2025-07-16 15:59 ` Darrick J. Wong
2025-07-16 12:54 ` [PATCH 5/7] xfs: replace min & max with clamp() in xfs_max_open_zones() Christoph Hellwig
2025-07-16 16:02 ` Darrick J. Wong
2025-07-16 16:52 ` Alan Huang
2025-07-17 5:16 ` Christoph Hellwig
2025-07-17 6:42 ` Alan Huang
2025-07-16 12:54 ` [PATCH 6/7] xfs: improve the comments in xfs_max_open_zones Christoph Hellwig
2025-07-16 16:03 ` Darrick J. Wong
2025-07-16 12:54 ` [PATCH 7/7] xfs: improve the comments in xfs_select_zone_nowait Christoph Hellwig
2025-07-16 16:03 ` 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=20250716155850.GJ2672049@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox