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?

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