nfsd41: use globals for DRC limits
The version 4.1 DRC memory limit and tracking variables are server wide and session specific. Replace struct svc_serv fields with globals. Stop using the svc_serv sv_lock. Add a spinlock to serialize access to the DRC limit management variables which change on session creation and deletion (usage counter) or (future) administrative action to adjust the total DRC memory limit. Signed-off-by: Andy Adamson <andros@netapp.com> Signed-off-by: Benny Halevy <bhalevy@panasas.com>
This commit is contained in:
committed by
J. Bruce Fields
parent
7702ce40bc
commit
4bd9b0f4af
@@ -430,11 +430,11 @@ static int set_forechannel_maxreqs(struct nfsd4_channel_attrs *fchan)
|
||||
else if (fchan->maxreqs > NFSD_MAX_SLOTS_PER_SESSION)
|
||||
fchan->maxreqs = NFSD_MAX_SLOTS_PER_SESSION;
|
||||
|
||||
spin_lock(&nfsd_serv->sv_lock);
|
||||
if (np + nfsd_serv->sv_drc_pages_used > nfsd_serv->sv_drc_max_pages)
|
||||
np = nfsd_serv->sv_drc_max_pages - nfsd_serv->sv_drc_pages_used;
|
||||
nfsd_serv->sv_drc_pages_used += np;
|
||||
spin_unlock(&nfsd_serv->sv_lock);
|
||||
spin_lock(&nfsd_drc_lock);
|
||||
if (np + nfsd_drc_pages_used > nfsd_drc_max_pages)
|
||||
np = nfsd_drc_max_pages - nfsd_drc_pages_used;
|
||||
nfsd_drc_pages_used += np;
|
||||
spin_unlock(&nfsd_drc_lock);
|
||||
|
||||
if (np <= 0) {
|
||||
status = nfserr_resource;
|
||||
|
Reference in New Issue
Block a user