nfsd4.1: fix session memory use calculation

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>
This commit is contained in:
J. Bruce Fields 2009-10-21 17:54:13 -04:00
parent dc7a08166f
commit dd829c4564
1 changed files with 4 additions and 1 deletions

View File

@ -629,10 +629,13 @@ void
free_session(struct kref *kref) free_session(struct kref *kref)
{ {
struct nfsd4_session *ses; struct nfsd4_session *ses;
int mem;
ses = container_of(kref, struct nfsd4_session, se_ref); ses = container_of(kref, struct nfsd4_session, se_ref);
spin_lock(&nfsd_drc_lock); 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); spin_unlock(&nfsd_drc_lock);
free_session_slots(ses); free_session_slots(ses);
kfree(ses); kfree(ses);