mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +09:00
nfsd: Replace clamp_t in nfsd4_get_drc_mem()
A recent change to clamp_t() in 6.1.y caused fs/nfsd/nfs4state.c to fail
to compile with gcc-9. The code in nfsd4_get_drc_mem() was written with
the assumption that when "max < min",
clamp(val, min, max)
would return max. This assumption is not documented as an API promise
and the change caused a compile failure if it could be statically
determined that "max < min".
The relevant code was no longer present upstream when commit 1519fbc8832b
("minmax.h: use BUILD_BUG_ON_MSG() for the lo < hi test in clamp()")
landed there, so there is no upstream change to nfsd4_get_drc_mem() to
backport.
There is no clear case that the existing code in nfsd4_get_drc_mem()
is functioning incorrectly. The goal of this patch is to permit the clean
application of commit 1519fbc8832b ("minmax.h: use BUILD_BUG_ON_MSG() for
the lo < hi test in clamp()"), and any commits that depend on it, to LTS
kernels without affecting the ability to compile those kernels. This is
done by open-coding the __clamp() macro sans the built-in type checking.
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220745#c0
Signed-off-by: NeilBrown <neil@brown.name>
Stable-dep-of: 1519fbc8832b ("minmax.h: use BUILD_BUG_ON_MSG() for the lo < hi test in clamp()")
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Reviewed_by: David Laight <david.laight.linux@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
5106da73b0
commit
0722d804f7
@@ -1820,8 +1820,10 @@ 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);
|
||||
if (avail > total_avail / scale_factor)
|
||||
avail = total_avail / scale_factor;
|
||||
else if (avail < slotsize)
|
||||
avail = slotsize;
|
||||
num = min_t(int, num, avail / slotsize);
|
||||
num = max_t(int, num, 1);
|
||||
nfsd_drc_mem_used += num * slotsize;
|
||||
|
||||
Reference in New Issue
Block a user