svn commit: r335866 - head/sys/rpc

Rick Macklem rmacklem at FreeBSD.org
Mon Jul 2 17:50:48 UTC 2018


Author: rmacklem
Date: Mon Jul  2 17:50:46 2018
New Revision: 335866
URL: https://svnweb.freebsd.org/changeset/base/335866

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
  MFC after:	2 weeks
  Differential Revision:	https://reviews.freebsd.org/D16087

Modified:
  head/sys/rpc/svc.c

Modified: head/sys/rpc/svc.c
==============================================================================
--- head/sys/rpc/svc.c	Mon Jul  2 17:18:46 2018	(r335865)
+++ head/sys/rpc/svc.c	Mon Jul  2 17:50:46 2018	(r335866)
@@ -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-all mailing list