Skip to contentSkip to conversation

FAILED: patch "[PATCH] xfs: only log freed extents for the current RTG in zoned" failed to apply to 6.18-stable tree

PATCH New [email protected] 2 participants 3 messages Jul 14 – Jul 18

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

The patch below does not apply to the 6.18-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

To reproduce the conflict and resubmit, you may use the following commands:

git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.18.y
git checkout FETCH_HEAD
git cherry-pick -x 44cccefe65749821d9a13523c8b763bf1262ef73
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026071441-surfacing-postwar-8451@gregkh' --subject-prefix 'PATCH 6.18.y' 'HEAD^..'

Possible dependencies:

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From 44cccefe65749821d9a13523c8b763bf1262ef73 Mon Sep 17 00:00:00 2001
From: Christoph Hellwig <[email protected]>
Date: Wed, 10 Jun 2026 07:07:21 +0200
Subject: [PATCH] xfs: only log freed extents for the current RTG in zoned
growfs

Otherwise a power fail or crash during growfs could lead to an elevated sb_rblocks counter.

Note that the step function is much simpler compared to the classic RT allocator as zoned RT sections must be aligned to real time group boundaries.

Fixes 01b71e64bb87 ("xfs: support growfs on zoned file systems")
Cc <[email protected]> # v6.15
fs/xfs/xfs_rtalloc.c +4 -4
index debbcefdf07f..7a3f97686989 100644
@@ -890,8 +890,7 @@ xfs_growfs_rt_sb_fields(
 
 static int
 xfs_growfs_rt_zoned(
-	struct xfs_rtgroup	*rtg,
-	xfs_rfsblock_t		nrblocks)
+	struct xfs_rtgroup	*rtg)
 {
 	struct xfs_mount	*mp = rtg_mount(rtg);
 	struct xfs_mount	*nmp;
@@ -903,7 +902,8 @@ xfs_growfs_rt_zoned(
 	 * Calculate new sb and mount fields for this round.  Also ensure the
 	 * rtg_extents value is uptodate as the rtbitmap code relies on it.
 	 */
-	nmp = xfs_growfs_rt_alloc_fake_mount(mp, nrblocks,
+	nmp = xfs_growfs_rt_alloc_fake_mount(mp,
+			xfs_rtgs_to_rfsbs(mp, rtg_rgno(rtg) + 1),
 			mp->m_sb.sb_rextsize);
 	if (!nmp)
 		return -ENOMEM;
@@ -1226,7 +1226,7 @@ xfs_growfs_rtg(
 	}
 
 	if (xfs_has_zoned(mp)) {
-		error = xfs_growfs_rt_zoned(rtg, nrblocks);
+		error = xfs_growfs_rt_zoned(rtg);
 		goto out_rele;
 	}
 
maintainer
#1 lore raw

PATCH 1/2 xfs: add a xfs_groups_to_rfsbs helper

From: Christoph Hellwig <[email protected]>

[ Upstream commit 0ec73eb3f12350799c4b3fb764225f6e38b42d1e ]

Plus a rtgroup wrapper and use that to avoid overflows when converting zone/rtg counts to block counts.

Stable-dep-of: 44cccefe6574 ("xfs: only log freed extents for the current RTG in zoned growfs")

---
 fs/xfs/libxfs/xfs_group.h    | 9 +++++++++
 fs/xfs/libxfs/xfs_rtgroup.h  | 8 ++++++++
 fs/xfs/xfs_zone_gc.c         | 3 +--
 fs/xfs/xfs_zone_space_resv.c | 8 +++-----
 4 files changed, 21 insertions(+), 7 deletions(-)
fs/xfs/libxfs/xfs_group.h +9 -0
index 4423932a231300..4ae638f1c2c519 100644
@@ -98,6 +98,15 @@ xfs_group_max_blocks(
 	return xg->xg_mount->m_groups[xg->xg_type].blocks;
 }
 
+static inline xfs_rfsblock_t
+xfs_groups_to_rfsbs(
+	struct xfs_mount	*mp,
+	uint32_t		nr_groups,
+	enum xfs_group_type	type)
+{
+	return (xfs_rfsblock_t)mp->m_groups[type].blocks * nr_groups;
+}
+
 static inline xfs_fsblock_t
 xfs_group_start_fsb(
 	struct xfs_group	*xg)
fs/xfs/libxfs/xfs_rtgroup.h +8 -0
index d4fcf591e63d08..a94e925ae67cb6 100644
@@ -371,4 +371,12 @@ static inline int xfs_initialize_rtgroups(struct xfs_mount *mp,
 # define xfs_rtgroup_get_geometry(rtg, rgeo)	(-EOPNOTSUPP)
 #endif /* CONFIG_XFS_RT */
 
+static inline xfs_rfsblock_t
+xfs_rtgs_to_rfsbs(
+	struct xfs_mount	*mp,
+	uint32_t		nr_groups)
+{
+	return xfs_groups_to_rfsbs(mp, nr_groups, XG_TYPE_RTG);
+}
+
 #endif /* __LIBXFS_RTGROUP_H */
fs/xfs/xfs_zone_gc.c +1 -2
index d18c43598d4b39..935b21c2b3bf52 100644
@@ -181,8 +181,7 @@ xfs_zoned_need_gc(
 	available = xfs_estimate_freecounter(mp, XC_FREE_RTAVAILABLE);
 
 	if (available <
-	    mp->m_groups[XG_TYPE_RTG].blocks *
-	    (mp->m_max_open_zones - XFS_OPEN_GC_ZONES))
+	    xfs_rtgs_to_rfsbs(mp, mp->m_max_open_zones - XFS_OPEN_GC_ZONES))
 		return true;
 
 	free = xfs_estimate_freecounter(mp, XC_FREE_RTEXTENTS);
fs/xfs/xfs_zone_space_resv.c +3 -5
index 9cd38716fd25f6..0e54e557a585e3 100644
@@ -54,12 +54,10 @@ xfs_zoned_default_resblks(
 {
 	switch (ctr) {
 	case XC_FREE_RTEXTENTS:
-		return (uint64_t)XFS_RESERVED_ZONES *
-			mp->m_groups[XG_TYPE_RTG].blocks +
-			mp->m_sb.sb_rtreserved;
+		return xfs_rtgs_to_rfsbs(mp, XFS_RESERVED_ZONES) +
+				mp->m_sb.sb_rtreserved;
 	case XC_FREE_RTAVAILABLE:
-		return (uint64_t)XFS_GC_ZONES *
-			mp->m_groups[XG_TYPE_RTG].blocks;
+		return xfs_rtgs_to_rfsbs(mp, XFS_GC_ZONES);
 	default:
 		ASSERT(0);
 		return 0;
Signature · 1 line
2.53.0
maintainer
#2 lore raw

PATCH 2/2 xfs: only log freed extents for the current RTG in zoned growfs

From: Christoph Hellwig <[email protected]>

[ Upstream commit 44cccefe65749821d9a13523c8b763bf1262ef73 ]

Otherwise a power fail or crash during growfs could lead to an elevated sb_rblocks counter.

Note that the step function is much simpler compared to the classic RT allocator as zoned RT sections must be aligned to real time group boundaries.

Fixes 01b71e64bb87 ("xfs: support growfs on zoned file systems")
Cc <[email protected]> # v6.15
---
 fs/xfs/xfs_rtalloc.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
fs/xfs/xfs_rtalloc.c +4 -4
index 59fad43063a781..907c88034c8dc4 100644
@@ -887,8 +887,7 @@ xfs_growfs_rt_sb_fields(
 
 static int
 xfs_growfs_rt_zoned(
-	struct xfs_rtgroup	*rtg,
-	xfs_rfsblock_t		nrblocks)
+	struct xfs_rtgroup	*rtg)
 {
 	struct xfs_mount	*mp = rtg_mount(rtg);
 	struct xfs_mount	*nmp;
@@ -900,7 +899,8 @@ xfs_growfs_rt_zoned(
 	 * Calculate new sb and mount fields for this round.  Also ensure the
 	 * rtg_extents value is uptodate as the rtbitmap code relies on it.
 	 */
-	nmp = xfs_growfs_rt_alloc_fake_mount(mp, nrblocks,
+	nmp = xfs_growfs_rt_alloc_fake_mount(mp,
+			xfs_rtgs_to_rfsbs(mp, rtg_rgno(rtg) + 1),
 			mp->m_sb.sb_rextsize);
 	if (!nmp)
 		return -ENOMEM;
@@ -1189,7 +1189,7 @@ xfs_growfs_rtg(
 	}
 
 	if (xfs_has_zoned(mp)) {
-		error = xfs_growfs_rt_zoned(rtg, nrblocks);
+		error = xfs_growfs_rt_zoned(rtg);
 		goto out_rele;
 	}
 
Signature · 1 line
2.53.0