On Mon, Oct 17, 2016 at 08:56:09PM +0200, [email protected] wrote:
> i recently updated from 6.0 to a snapshot and
> since then i see splassert sometimes in my dmesg when i use if_run USB
> network device.
...
> splassert_check() at splassert_check+0x78
> sowakeup() at sowakeup+0x2c
> sorwakeup() at sorwakeup+0x84
> route_input() at route_input+0x284
> run_attach() at run_attach+0x322
This should fix it.
ok?
bluhm
Index: net/rtsock.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/rtsock.c,v
retrieving revision 1.207
diff -u -p -r1.207 rtsock.c
--- net/rtsock.c 27 Sep 2016 18:41:11 -0000 1.207
+++ net/rtsock.c 17 Oct 2016 20:46:47 -0000
@@ -339,7 +339,7 @@ route_input(struct mbuf *m0, ...)
struct routecb *rop;
struct rt_msghdr *rtm;
struct mbuf *m = m0;
- int sockets = 0;
+ int s, sockets = 0;
struct socket *last = NULL;
va_list ap;
struct sockproto *proto;
@@ -419,6 +419,7 @@ route_input(struct mbuf *m0, ...)
if (last) {
struct mbuf *n;
if ((n = m_copym(m, 0, M_COPYALL, M_NOWAIT)) != NULL) {
+ s = splsoftnet();
if (sbspace(&last->so_rcv) < (2 * MSIZE) ||
sbappendaddr(&last->so_rcv, sosrc,
n, (struct mbuf *)NULL) == 0) {
@@ -435,11 +436,13 @@ route_input(struct mbuf *m0, ...)
sorwakeup(last);
sockets++;
}
+ splx(s);
}
}
last = rp->rcb_socket;
}
if (last) {
+ s = splsoftnet();
if (sbspace(&last->so_rcv) < (2 * MSIZE) ||
sbappendaddr(&last->so_rcv, sosrc,
m, (struct mbuf *)NULL) == 0) {
@@ -452,6 +455,7 @@ route_input(struct mbuf *m0, ...)
sorwakeup(last);
sockets++;
}
+ splx(s);
} else
m_freem(m);
}