Panic: witness_warn (r191682;
shared rw udpinp (udpinp)...netinet6/udp6_usrreq.c:360)
Bruce Simpson
bms at incunabulum.net
Thu Apr 30 21:43:31 UTC 2009
David Wolfskill wrote:
> ...
> I believe that qualifies as Goodness, as I was able to use ssh to
> access the machine, so it's definitely up in multi-user mode.
>
Hi,
Can you try this patch? This patch is probably more correct -- but you
can see my intent was to avoid thrashing the INP lock on mcast delivery.
INP lock use in that routine is goopy to read. That'll teach me to do
things from memory for IPv4... bah! :-)
cheers
BMS
-------------- next part --------------
Index: udp6_usrreq.c
===================================================================
--- udp6_usrreq.c (revision 191705)
+++ udp6_usrreq.c (working copy)
@@ -279,8 +279,6 @@
continue;
}
- INP_RLOCK(inp);
-
/*
* Handle socket delivery policy for any-source
* and source-specific multicast. [RFC3678]
@@ -290,6 +288,8 @@
struct sockaddr_in6 mcaddr;
int blocked;
+ INP_RLOCK(inp);
+
bzero(&mcaddr, sizeof(struct sockaddr_in6));
mcaddr.sin6_len = sizeof(struct sockaddr_in6);
mcaddr.sin6_family = AF_INET6;
@@ -304,9 +304,11 @@
if (blocked == MCAST_NOTSMEMBER ||
blocked == MCAST_MUTED)
UDPSTAT_INC(udps_filtermcast);
- INP_RUNLOCK(inp);
+ INP_RUNLOCK(inp); /* XXX */
continue;
}
+
+ INP_RUNLOCK(inp);
}
if (last != NULL) {
struct mbuf *n;
@@ -423,8 +425,6 @@
return (IPPROTO_DONE);
badheadlocked:
- if (inp)
- INP_RUNLOCK(inp);
INP_INFO_RUNLOCK(&V_udbinfo);
badunlocked:
if (m)
More information about the freebsd-current
mailing list