DragonFly bugs List (threaded) for 2008-05
DragonFly BSD
DragonFly bugs List (threaded) for 2008-05
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: panic: assertion: !IS_SERIALIZED((s)) in lwkt_serialize_enter


From: "Sepherosa Ziehau" <sepherosa@xxxxxxxxx>
Date: Wed, 28 May 2008 09:30:02 +0800

On Wed, May 28, 2008 at 6:08 AM, Matthew Dillon
<dillon@apollo.backplane.com> 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;
 }


[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]