nfsd4.1: fix session memory use calculation
authorJ. Bruce Fields <bfields@citi.umich.edu>
Wed, 21 Oct 2009 21:54:13 +0000 (17:54 -0400)
committerJ. Bruce Fields <bfields@citi.umich.edu>
Tue, 27 Oct 2009 23:34:43 +0000 (19:34 -0400)
Unbalanced calculations on creation and destruction of sessions could
cause our estimate of cache memory used to become negative, sometimes
resulting in spurious SERVERFAULT returns to client CREATE_SESSION
requests.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
fs/nfsd/nfs4state.c

index fcb9817881a15d5f558aacdb5e61d20d3d7e4b1a..c17137110412947e9385740b1b0363f6f761bdb1 100644 (file)
@@ -629,10 +629,13 @@ void
 free_session(struct kref *kref)
 {
        struct nfsd4_session *ses;
+       int mem;
 
        ses = container_of(kref, struct nfsd4_session, se_ref);
        spin_lock(&nfsd_drc_lock);
-       nfsd_drc_mem_used -= ses->se_fchannel.maxreqs * NFSD_SLOT_CACHE_SIZE;
+       mem = ses->se_fchannel.maxreqs
+               * (ses->se_fchannel.maxresp_cached - NFSD_MIN_HDR_SEQ_SZ);
+       nfsd_drc_mem_used -= mem;
        spin_unlock(&nfsd_drc_lock);
        free_session_slots(ses);
        kfree(ses);