On Fri, May 13, 2022 at 04:05:15PM +0000, Visa Hankala wrote: > The NFS subsystem is not MP-safe yet. Take this into account > in the NFS server socket upcall by locking the kernel. > > This might help with the NFS server hanging that was seen recently > as a result of the now-reverted selwakeup()-to-KNOTE() conversion. > Unfortunately, I have not been able to confirm this myself. > > OK?
OK bluhm@ > Index: nfs/nfs_socket.c > =================================================================== > RCS file: src/sys/nfs/nfs_socket.c,v > retrieving revision 1.140 > diff -u -p -r1.140 nfs_socket.c > --- nfs/nfs_socket.c 17 Mar 2022 14:23:34 -0000 1.140 > +++ nfs/nfs_socket.c 13 May 2022 15:38:48 -0000 > @@ -1561,8 +1561,10 @@ nfsrv_rcv(struct socket *so, caddr_t arg > struct uio auio; > int flags, error; > > + KERNEL_LOCK(); > + > if ((slp->ns_flag & SLP_VALID) == 0) > - return; > + goto out; > > /* Defer soreceive() to an nfsd. */ > if (waitflag == M_DONTWAIT) { > @@ -1644,6 +1646,9 @@ dorecs: > if (waitflag == M_DONTWAIT && > (slp->ns_rec || (slp->ns_flag & (SLP_NEEDQ | SLP_DISCONN)))) > nfsrv_wakenfsd(slp); > + > +out: > + KERNEL_UNLOCK(); > } > > /*