Skip to content

Commit bd7c193

Browse files
committed
XFS: fix zoned gc threshold math for 32-bit arches
xfs_zoned_need_gc makes use of mult_frac() to calculate the threshold for triggering the zoned garbage collector, but, turns out mult_frac() doesn't properly work with 64-bit data types and this caused build failures on some 32-bit architectures. Fix this by essentially open coding mult_frac() in a 64-bit friendly way. Notice we don't need to bother with counters underflow here because xfs_estimate_freecounter() will always return a positive value, as it leverages percpu_counter_read_positive to read such counters. Fixes: 845abeb ("xfs: add tunable threshold parameter for triggering zone GC") Reported-by: kernel test robot <lkp@intel.com> Closes: https://lore.kernel.org/oe-kbuild-all/202504181233.F7D9Atra-lkp@intel.com/ Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com> Tested-by: Guenter Roeck <linux@roeck-us.net> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Hans Holmberg <hans.holmberg@wdc.com> Signed-off-by: Carlos Maiolino <cem@kernel.org>
1 parent c7b67dd commit bd7c193

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

fs/xfs/xfs_zone_gc.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,8 @@ bool
170170
xfs_zoned_need_gc(
171171
struct xfs_mount *mp)
172172
{
173-
s64 available, free;
173+
s64 available, free, threshold;
174+
s32 remainder;
174175

175176
if (!xfs_group_marked(mp, XG_TYPE_RTG, XFS_RTG_RECLAIMABLE))
176177
return false;
@@ -183,7 +184,12 @@ xfs_zoned_need_gc(
183184
return true;
184185

185186
free = xfs_estimate_freecounter(mp, XC_FREE_RTEXTENTS);
186-
if (available < mult_frac(free, mp->m_zonegc_low_space, 100))
187+
188+
threshold = div_s64_rem(free, 100, &remainder);
189+
threshold = threshold * mp->m_zonegc_low_space +
190+
remainder * div_s64(mp->m_zonegc_low_space, 100);
191+
192+
if (available < threshold)
187193
return true;
188194

189195
return false;

0 commit comments

Comments
 (0)