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();
>  }
>  
>  /*

Reply via email to