On Mon, Sep 26, 2016 at 01:55:01PM +0100, Stuart Henderson wrote:
> Seen about a dozen times on a box doing ospfd + ospf6d (for internal
> routes), bgpd (for default route) + isakmpd, shortly after startup
> after updating:
>
> splassert: sorwakeup: want 5 have 4
> Starting stack trace...
> splassert_check() at splassert_check+0x78
> sorwakeup() at sorwakeup+0x27
> timeout_run() at timeout_run+0x48
> softclock() at softclock+0x14c
> softintr_dispatch() at softintr_dispatch+0x8b
> Xsoftclock() at Xsoftclock+0x1f
> --- interrupt ---
> end of kernel
> end trace frame: 0x51, count: 251
> 0x8:
> End of stack trace.
>
Perhaps this?
Index: rtsock.c
===================================================================
RCS file: /cvs/src/sys/net/rtsock.c,v
retrieving revision 1.206
diff -u -p -r1.206 rtsock.c
--- rtsock.c 24 Sep 2016 19:27:10 -0000 1.206
+++ rtsock.c 26 Sep 2016 17:23:21 -0000
@@ -302,6 +302,7 @@ rt_senddesync(void *data)
struct rawcb *rp;
struct routecb *rop;
struct mbuf *desync_mbuf;
+ int s;
rp = (struct rawcb *)data;
rop = (struct routecb *)rp;
@@ -317,7 +318,9 @@ rt_senddesync(void *data)
(sbappendaddr(&rp->rcb_socket->so_rcv, &route_src,
desync_mbuf, (struct mbuf *)NULL) != 0)) {
rop->flags &= ~ROUTECB_FLAG_DESYNC;
+ s = splsoftnet();
sorwakeup(rp->rcb_socket);
+ splx(s);
} else {
m_freem(desync_mbuf);
/* Re-add timeout to try sending msg again */