On Thu, Apr 23, 2009 at 12:42:47PM -0400, andros@xxxxxxxxxx wrote: > From: Andy Adamson <andros@xxxxxxxxxx> > > Don't use the sv_lock as per March 31 review by bfields. If you could remind me (and anyone else) what my complaint was, that'd be helpful. (OK, I think it's coming back to me. Still, it's a comment that's not useful to anyone else later.) > > Serialize access to sv_drc_pages_used which changes on session creation. So this information is all server-wide? Might as well just make it (the lock, and the other sv_drc_* stuff) global, I guess. It shouldn't be in an rpc-level structure (struct svc_serv) since it's nfs/sessions-specific. --b. > > Signed-off-by: Andy Adamson <andros@xxxxxxxxxx> > --- > fs/nfsd/nfs4state.c | 4 ++-- > include/linux/sunrpc/svc.h | 1 + > net/sunrpc/svc.c | 1 + > 3 files changed, 4 insertions(+), 2 deletions(-) > > diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c > index 4cc66f3..af21f94 100644 > --- a/fs/nfsd/nfs4state.c > +++ b/fs/nfsd/nfs4state.c > @@ -427,11 +427,11 @@ static int set_forechannel_maxreqs(struct nfsd4_channel_attrs *fchan) > { > int status = 0, np = fchan->maxreqs * NFSD_PAGES_PER_SLOT; > > - spin_lock(&nfsd_serv->sv_lock); > + spin_lock(&nfsd_serv->sv_drc_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_unlock(&nfsd_serv->sv_drc_lock); > > if (np <= 0) { > status = nfserr_resource; > diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h > index 2a30775..0d2315c 100644 > --- a/include/linux/sunrpc/svc.h > +++ b/include/linux/sunrpc/svc.h > @@ -94,6 +94,7 @@ struct svc_serv { > struct module * sv_module; /* optional module to count when > * adding threads */ > svc_thread_fn sv_function; /* main function for threads */ > + spinlock_t sv_drc_lock; > unsigned int sv_drc_max_pages; /* Total pages for DRC */ > unsigned int sv_drc_pages_used;/* DRC pages used */ > }; > diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c > index 8847add..c25070a 100644 > --- a/net/sunrpc/svc.c > +++ b/net/sunrpc/svc.c > @@ -394,6 +394,7 @@ __svc_create(struct svc_program *prog, unsigned int bufsize, int npools, > INIT_LIST_HEAD(&serv->sv_permsocks); > init_timer(&serv->sv_temptimer); > spin_lock_init(&serv->sv_lock); > + spin_lock_init(&serv->sv_drc_lock); > > serv->sv_nrpools = npools; > serv->sv_pools = > -- > 1.5.4.3 > -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html