svn commit: r335867 - projects/pnfs-planb-server/sys/rpc
Rick Macklem
rmacklem at FreeBSD.org
Mon Jul 2 17:54:34 UTC 2018
Author: rmacklem
Date: Mon Jul 2 17:54:33 2018
New Revision: 335867
URL: https://svnweb.freebsd.org/changeset/base/335867
Log:
Fix the server side krpc so that the kernel nfsd threads terminate.
Occationally the kernel nfsd threads would not terminate when a SIGKILL
was posted for the kernel process (called nfsd (slave)). When this occurred,
the thread associated with the process (called "ismaster") had returned from
svc_run_internal() and was sleeping waiting for the other threads to terminate.
The other threads (created by kthread_start()) were still in svc_run_internal()
handling NFS RPCs.
The only way this could occur is for the "ismaster" thread to return from
svc_run_internal() without having called svc_exit().
There was only one place in the code where this could happen and this patch
stops that from happening.
Since the problem is intermittent, I cannot be sure if this has fixed the
problem, but I have not seen an occurrence of the problem with this patch
applied.
Reviewed by: kib
Differential Revision: https://reviews.freebsd.org/D16087
Modified:
projects/pnfs-planb-server/sys/rpc/svc.c
Modified: projects/pnfs-planb-server/sys/rpc/svc.c
==============================================================================
--- projects/pnfs-planb-server/sys/rpc/svc.c Mon Jul 2 17:50:46 2018 (r335866)
+++ projects/pnfs-planb-server/sys/rpc/svc.c Mon Jul 2 17:54:33 2018 (r335867)
@@ -1185,7 +1185,8 @@ svc_run_internal(SVCGROUP *grp, bool_t ismaster)
/*
* Enforce maxthreads count.
*/
- if (grp->sg_threadcount > grp->sg_maxthreads)
+ if (!ismaster && grp->sg_threadcount >
+ grp->sg_maxthreads)
break;
/*
More information about the svn-src-projects
mailing list