[Focal:*-5.15] UBUNTU: SAUCE: Work-around compile bug in gcc-9.4
Stefan Bader
stefan.bader at canonical.com
Tue Jan 20 16:02:18 UTC 2026
Upstream stable v5.15.195 contained a rather big set of patches
reworking the min/max and clamp macros:
- minmax: add in_range() macro
- minmax: Introduce {min,max}_array()
- minmax: deduplicate __unconst_integer_typeof()
- minmax: fix indentation of __cmp_once() and __clamp_once()
- minmax: avoid overly complicated constant expressions in VM code
- minmax: add a few more MIN_T/MAX_T users
- minmax: simplify and clarify min_t()/max_t() implementation
- minmax: make generic MIN() and MAX() macros available everywhere
- minmax: don't use max() in situations that want a C constant expression
- minmax: simplify min()/max()/clamp() implementation
- minmax: improve macro expansion and type checking
- minmax: fix up min3() and max3() too
- minmax.h: add whitespace around operators and after commas
- minmax.h: update some comments
- minmax.h: reduce the #define expansion of min(), max() and clamp()
- minmax.h: use BUILD_BUG_ON_MSG() for the lo < hi test in clamp()
- minmax.h: move all the clamp() definitions after the min/max() ones
- minmax.h: simplify the variants of clamp()
- minmax.h: remove some #defines that are only expanded once
This works without problems when compiled with gcc-11 (Jammy) but
unexpectedly breaks when compiling with gcc-9 (Focal). Somehow the
compiler considers (u32) always bigger than ((unsigned long)/unsigned
int)). There might be other places but for the generic build this
happens only in fs/nfs/nfs4stat.c. To work around this we add a cast to
unsigned long.
Ignore: yes
Fixes: Jammy update: v5.15.195 upstream stable release (2133909)
Signed-off-by: Stefan Bader <stefan.bader at canonical.com>
---
I know this is not the standard format and procedure but this is needed
to get a 5.15 backport for the 2026.01.12 cycle compiled in focal...
fs/nfsd/nfs4state.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index df982830efc2..d8e014535ae1 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -1823,7 +1823,7 @@ static u32 nfsd4_get_drc_mem(struct nfsd4_channel_attrs *ca, struct nfsd_net *nn
scale_factor = max_t(unsigned int, 8, nn->nfsd_serv->sv_nrthreads);
avail = clamp_t(unsigned long, avail, slotsize,
- total_avail/scale_factor);
+ ((unsigned long) total_avail/scale_factor));
num = min_t(int, num, avail / slotsize);
num = max_t(int, num, 1);
nfsd_drc_mem_used += num * slotsize;
--
2.43.0
More information about the kernel-team
mailing list