From owner-freebsd-current@FreeBSD.ORG Wed Jul 27 22:51:44 2005 Return-Path: X-Original-To: freebsd-current@FreeBSD.org Delivered-To: freebsd-current@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id C7E6F16A41F; Wed, 27 Jul 2005 22:51:44 +0000 (GMT) (envelope-from rwatson@FreeBSD.org) Received: from cyrus.watson.org (cyrus.watson.org [204.156.12.53]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7C29D43D45; Wed, 27 Jul 2005 22:51:44 +0000 (GMT) (envelope-from rwatson@FreeBSD.org) Received: from fledge.watson.org (fledge.watson.org [204.156.12.50]) by cyrus.watson.org (Postfix) with ESMTP id 16E2A46B27; Wed, 27 Jul 2005 18:51:44 -0400 (EDT) Date: Wed, 27 Jul 2005 23:53:07 +0100 (BST) From: Robert Watson X-X-Sender: robert@fledge.watson.org To: Craig Rodrigues In-Reply-To: <20050727214820.GA1123@crodrigues.org> Message-ID: <20050727235142.F54330@fledge.watson.org> References: <20050726124222.GA1109@crodrigues.org> <20050726131712.GC46538@darkness.comp.waw.pl> <20050726145334.GA1826@crodrigues.org> <20050727223351.A54330@fledge.watson.org> <20050727214820.GA1123@crodrigues.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: freebsd-current@FreeBSD.org, Harti Brandt Subject: Re: Panic in netnatm X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 27 Jul 2005 22:51:44 -0000 On Wed, 27 Jul 2005, Craig Rodrigues wrote: > On Wed, Jul 27, 2005 at 10:35:34PM +0100, Robert Watson wrote: >> Otherwise, this looks good to me! (And I guess neither Harti or Bruce got >> a chance to test these code paths?) > > Harti is on vacation until the end of August so I received no feedback > from him. I updated my patch based on your comments. What do you think? I think you still need an NATM_UNLOCK() in the 'goto failed' case, probably placed outside of the "if (npcb) {' block since it will need to be unlocked in both cases. I.e., this additional block: @@ -256,6 +258,7 @@ rt->rt_llinfo = NULL; rt->rt_flags &= ~RTF_LLINFO; } + NATM_UNLOCK(); #endif /* mark as invalid. We cannot RTM_DELETE the route from * here, because the recursive call to rtrequest1 does (will need to be hand-applied due to xterm copy+paste). Robert N M Watson > > > --- if_atm.c.orig Tue Jul 26 10:28:42 2005 > +++ if_atm.c Wed Jul 27 17:44:45 2005 > @@ -221,6 +221,7 @@ > * let native ATM know we are using this VCI/VPI > * (i.e. reserve it) > */ > + NATM_LOCK(); > sin = (struct sockaddr_in *) rt_key(rt); > if (sin->sin_family != AF_INET) > goto failed; > @@ -256,6 +257,7 @@ > rt->rt_llinfo = NULL; > rt->rt_flags &= ~RTF_LLINFO; > } > + NATM_UNLOCK(); > #endif > /* mark as invalid. We cannot RTM_DELETE the route from > * here, because the recursive call to rtrequest1 does > @@ -269,10 +271,12 @@ > * tell native ATM we are done with this VC > */ > if (rt->rt_flags & RTF_LLINFO) { > + NATM_LOCK(); > npcb_free((struct natmpcb *)rt->rt_llinfo, > NPCB_DESTROY); > rt->rt_llinfo = NULL; > rt->rt_flags &= ~RTF_LLINFO; > + NATM_UNLOCK(); > } > #endif > /* > > > -- > Craig Rodrigues > rodrigc@crodrigues.org >