]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
nfsd: give out fewer session slots as limit approaches
authorJ. Bruce Fields <bfields@redhat.com>
Tue, 19 Sep 2017 23:25:41 +0000 (19:25 -0400)
committerBrian Maly <brian.maly@oracle.com>
Tue, 21 Aug 2018 18:41:44 +0000 (14:41 -0400)
Instead of granting client's full requests until we hit our DRC size
limit and then failing CREATE_SESSIONs (and hence mounts) completely,
start granting clients smaller slot tables as we approach the limit.

The factor chosen here is pretty much arbitrary.

Signed-off-by: J. Bruce Fields <bfields@redhat.com>
(cherry picked from commit de766e570413bd0484af0b580299b495ada625c3)

Orabug: 28023821

Signed-off-by: Manjunath Patil <manjunath.b.patil@oracle.com>
Reviewed-by: Calum Mackay <calum.mackay@oracle.com>
Signed-off-by: Brian Maly <brian.maly@oracle.com>
fs/nfsd/nfs4state.c

index bb6c324f1f3df98a4b0b53d13d94752faf587b3a..66e87ac4051c973c8d0f72848ac5de11a7c53416 100644 (file)
@@ -1399,6 +1399,11 @@ static u32 nfsd4_get_drc_mem(struct nfsd4_channel_attrs *ca)
        spin_lock(&nfsd_drc_lock);
        avail = min((unsigned long)NFSD_MAX_MEM_PER_SESSION,
                    nfsd_drc_max_mem - nfsd_drc_mem_used);
+       /*
+        * Never use more than a third of the remaining memory,
+        * unless it's the only way to give this client a slot:
+        */
+       avail = clamp_t(int, avail, slotsize, avail/3);
        num = min_t(int, num, avail / slotsize);
        nfsd_drc_mem_used += num * slotsize;
        spin_unlock(&nfsd_drc_lock);