From owner-freebsd-net@FreeBSD.ORG Fri Dec 14 15:29:43 2007 Return-Path: Delivered-To: net@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9EBA516A420 for ; Fri, 14 Dec 2007 15:29:43 +0000 (UTC) (envelope-from mux@freebsd.org) Received: from elvis.mu.org (elvis.mu.org [192.203.228.196]) by mx1.freebsd.org (Postfix) with ESMTP id 8E5A913C4F4 for ; Fri, 14 Dec 2007 15:29:43 +0000 (UTC) (envelope-from mux@freebsd.org) Received: by elvis.mu.org (Postfix, from userid 1920) id 585A81A4D86; Fri, 14 Dec 2007 07:28:47 -0800 (PST) Date: Fri, 14 Dec 2007 16:28:47 +0100 From: Maxime Henrion To: Stephen Clark Message-ID: <20071214152847.GH71713@elvis.mu.org> References: <20071213133817.GC71713@elvis.mu.org> <47617027.3020500@seclark.us> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <47617027.3020500@seclark.us> User-Agent: Mutt/1.4.2.3i Cc: net@FreeBSD.org Subject: Re: Deadlock in the routing code X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Dec 2007 15:29:43 -0000 Stephen Clark wrote: > Maxime Henrion wrote: > > >Replying to myself on this one, sorry about that. > > > >I said in my previous mail that I didn't know yet what process was > >holding the lock of the rtentry that the routed process is dealing > >with in rt_setgate(), and I just could verify that it is held by > >the swi1: net thread. > > > >So, in a nutshell: > > > >- The routed process does its business on the routing socket, that ends up > > calling rt_setgate(). While in rt_setgate() it drops the lock on its > > rtentry in order to call rtalloc1(). At this point, the routed > > process hold the gateway route (rtalloc1() returns it locked), and it > > now tries to re-lock the original rtentry. > >- At the same time, the swi net thread calls arpresolve() which ends up > > calling rt_check(). Then rt_check() locks the rtentry, and tries to > > lock the gateway route. > > > >A classical case of deadlock with mutexes because of different locking > >order. Now, it's not obvious to me how to fix it :-). > > > >Maxime > >_______________________________________________ > >freebsd-net@freebsd.org mailing list > >http://lists.freebsd.org/mailman/listinfo/freebsd-net > >To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" > > > > > > > what version of freebsd is this? Oops, forgot that bit of information: RELENG_6 as of a few days ago; it does include jhb@'s last fix in this area, if that's what you've been wondering. Cheers, Maxime