On Wed, Dec 21, 2016 at 04:52:32PM +0000, Visa Hankala wrote:
> Network boot triggers a netlock recursion:
> 
> panic
> rw_enter
> sosend  <- NET_LOCK()
> nfs_send
> nfs_request
> nfs_lookup
> VOP_LOOKUP
> vfs_lookup
> namei
> unp_connect
> uipc_usrreq
> soconnect  <- NET_LOCK()
> sys_connect
> 
> An XXXSMP workaround seems appropriate here.
> 
> OK?

I was wondering wether the unp or the nfs layer is the right place
for the workaround.  As we have another XXXSMP in uipc_usrreq()
this seems correct.

OK bluhm@

> 
> Index: kern/uipc_usrreq.c
> ===================================================================
> RCS file: src/sys/kern/uipc_usrreq.c,v
> retrieving revision 1.104
> diff -u -p -r1.104 uipc_usrreq.c
> --- kern/uipc_usrreq.c        19 Dec 2016 08:36:49 -0000      1.104
> +++ kern/uipc_usrreq.c        21 Dec 2016 16:44:03 -0000
> @@ -143,7 +143,10 @@ uipc_usrreq(struct socket *so, int req, 
>               break;
>  
>       case PRU_CONNECT:
> +             /* XXXSMP breaks atomicity */
> +             rw_exit_write(&netlock);
>               error = unp_connect(so, nam, p);
> +             rw_enter_write(&netlock);
>               break;
>  
>       case PRU_CONNECT2:

Reply via email to