aboutsummaryrefslogtreecommitdiff
path: root/fs/nfsd/nfssvc.c
diff options
context:
space:
mode:
authorGravatar NeilBrown <neilb@suse.de> 2023-09-11 10:40:09 -0400
committerGravatar Chuck Lever <chuck.lever@oracle.com> 2023-10-16 12:44:07 -0400
commit2e8fc923fe476db8cab9b6458027eccb22f3b6e6 (patch)
tree5b143877a907eb433062042d60d09f469b2a9728 /fs/nfsd/nfssvc.c
parentSUNRPC: use lwq for sp_sockets - renamed to sp_xprts (diff)
downloadlinux-2e8fc923fe476db8cab9b6458027eccb22f3b6e6.tar.gz
linux-2e8fc923fe476db8cab9b6458027eccb22f3b6e6.tar.bz2
linux-2e8fc923fe476db8cab9b6458027eccb22f3b6e6.zip
SUNRPC: change sp_nrthreads to atomic_t
Using an atomic_t avoids the need to take a spinlock (which can soon be removed). Choosing a thread to kill needs to be careful as we cannot set the "die now" bit atomically with the test on the count. Instead we temporarily increase the count. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Diffstat (limited to 'fs/nfsd/nfssvc.c')
-rw-r--r--fs/nfsd/nfssvc.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
index 0b03a2e50dee..433154b9eee0 100644
--- a/fs/nfsd/nfssvc.c
+++ b/fs/nfsd/nfssvc.c
@@ -713,14 +713,13 @@ int nfsd_nrpools(struct net *net)
int nfsd_get_nrthreads(int n, int *nthreads, struct net *net)
{
- int i = 0;
struct nfsd_net *nn = net_generic(net, nfsd_net_id);
+ struct svc_serv *serv = nn->nfsd_serv;
+ int i;
- if (nn->nfsd_serv != NULL) {
- for (i = 0; i < nn->nfsd_serv->sv_nrpools && i < n; i++)
- nthreads[i] = nn->nfsd_serv->sv_pools[i].sp_nrthreads;
- }
-
+ if (serv)
+ for (i = 0; i < serv->sv_nrpools && i < n; i++)
+ nthreads[i] = atomic_read(&serv->sv_pools[i].sp_nrthreads);
return 0;
}