FAILED: patch "[PATCH] xfs: only log freed extents for the current RTG in zoned" failed to apply to 6.18-stable tree
Subsystems (2)
[email protected]
maintainerThe 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.
fs/xfs/xfs_rtalloc.c +4 -4
@@ -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; }
Sasha Levin
maintainerPATCH 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
@@ -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
@@ -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
@@ -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
@@ -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
Sasha Levin
maintainerPATCH 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.
--- fs/xfs/xfs_rtalloc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
fs/xfs/xfs_rtalloc.c +4 -4
@@ -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