Skip to content

Commit cda045c

Browse files
J. Bruce Fieldsgregkh
authored andcommitted
nfsd: fix performance-limiting session calculation
[ Upstream commit c54f24e ] We're unintentionally limiting the number of slots per nfsv4.1 session to 10. Often more than 10 simultaneous RPCs are needed for the best performance. This calculation was meant to prevent any one client from using up more than a third of the limit we set for total memory use across all clients and sessions. Instead, it's limiting the client to a third of the maximum for a single session. Fix this. Reported-by: Chris Tracy <ctracy@engr.scu.edu> Cc: stable@vger.kernel.org Fixes: de766e5 "nfsd: give out fewer session slots as limit approaches" Signed-off-by: J. Bruce Fields <bfields@redhat.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent 728009f commit cda045c

1 file changed

Lines changed: 4 additions & 4 deletions

File tree

fs/nfsd/nfs4state.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1391,16 +1391,16 @@ static u32 nfsd4_get_drc_mem(struct nfsd4_channel_attrs *ca)
13911391
{
13921392
u32 slotsize = slot_bytes(ca);
13931393
u32 num = ca->maxreqs;
1394-
int avail;
1394+
unsigned long avail, total_avail;
13951395

13961396
spin_lock(&nfsd_drc_lock);
1397-
avail = min((unsigned long)NFSD_MAX_MEM_PER_SESSION,
1398-
nfsd_drc_max_mem - nfsd_drc_mem_used);
1397+
total_avail = nfsd_drc_max_mem - nfsd_drc_mem_used;
1398+
avail = min((unsigned long)NFSD_MAX_MEM_PER_SESSION, total_avail);
13991399
/*
14001400
* Never use more than a third of the remaining memory,
14011401
* unless it's the only way to give this client a slot:
14021402
*/
1403-
avail = clamp_t(int, avail, slotsize, avail/3);
1403+
avail = clamp_t(int, avail, slotsize, total_avail/3);
14041404
num = min_t(int, num, avail / slotsize);
14051405
nfsd_drc_mem_used += num * slotsize;
14061406
spin_unlock(&nfsd_drc_lock);

0 commit comments

Comments
 (0)