On Wed, May 28, 2008 at 6:08 AM, Matthew Dillon
<[EMAIL PROTECTED]> wrote:
>    I got this panic while messing around with the TAP interface on a
>    recent HEAD.
>
>    I'm not quite sure what the state of the TAP interfaces was when
>    it occured.  I had three of them active, plus a bridge with one
>    of them attached (but I don't think the bridge is related to the
>    crash).
>
>    In anycase, I've placed the kernel and vmcore in ~dillon/crash/*.17 on
>    leaf.

Please test the attached patch.  It should be able to fix the panic.
I will take a close look at arp code, when I am back home.

Best Regards,
sephe

-- 
Live Free or Die
Index: if_ether.c
===================================================================
RCS file: /dcvs/src/sys/netinet/if_ether.c,v
retrieving revision 1.46
diff -u -r1.46 if_ether.c
--- if_ether.c  14 May 2008 11:59:24 -0000      1.46
+++ if_ether.c  28 May 2008 01:28:02 -0000
@@ -953,9 +953,14 @@
 void
 arp_ifinit(struct ifnet *ifp, struct ifaddr *ifa)
 {
-       if (IA_SIN(ifa)->sin_addr.s_addr != INADDR_ANY)
+       ASSERT_SERIALIZED(ifp->if_serializer);
+
+       if (IA_SIN(ifa)->sin_addr.s_addr != INADDR_ANY) {
+               lwkt_serialize_exit(ifp->if_serializer);
                arprequest(ifp, &IA_SIN(ifa)->sin_addr, &IA_SIN(ifa)->sin_addr,
                           IF_LLADDR(ifp));
+               lwkt_serialize_enter(ifp->if_serializer);
+       }
        ifa->ifa_rtrequest = arp_rtrequest;
        ifa->ifa_flags |= RTF_CLONING;
 }

Reply via email to