Date: Sat, 25 Apr 2009 20:16:57 +0100 (BST) From: Robert Watson <rwatson@FreeBSD.org> To: Ruslan Ermilov <ru@FreeBSD.org> Cc: freebsd-stable@freebsd.org, John Baldwin <jhb@freebsd.org> Subject: Re: RELENG_7 crash Message-ID: <alpine.BSF.2.00.0904252015340.91546@fledge.watson.org> In-Reply-To: <20090421153112.GA47589@edoofus.dev.vega.ru> References: <200904210524.n3L5O9YS086865@lava.sentex.ca> <200904211111.57295.jhb@freebsd.org> <200904211519.n3LFJFsk090691@lava.sentex.ca> <20090421153112.GA47589@edoofus.dev.vega.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 21 Apr 2009, Ruslan Ermilov wrote: >> Is it possible I am running into some of the interface lock fixes rwatson >> has been working on ? This box has a lot of ng interfaces which come and >> go. Perhaps snmp asking about an interface that just went away caused the >> panic ? I disabled bsnmp since the reboot and the box has been up for 10hrs >> so far. >> > It's a documented bug: Just to follow up on this thread: I've committed a work-around to 7-STABLE as well as the 7.2 release engineering branch. The on-going ifnet reference-counting/address list locking/etc work in 8-CURRENT is the long-term solution, and I will MFC it after 7.2 is out the door and it's settled some, but with any luck the work-around will prevent instant panics in the described scenario. Robert N M Watson Computer Laboratory University of Cambridge > > : revision 1.281 > : date: 2008/06/26 23:05:28; author: rwatson; state: Exp; lines: +69 -12 > : SVN rev 180042 on 2008-06-26 23:05:28Z by rwatson > : > : Introduce locking around use of ifindex_table, whose use was previously > : unsynchronized. While races were extremely rare, we've now had a > : couple of reports of panics in environments involving large numbers of > : IPSEC tunnels being added very quickly on an active system. > : > : - Add accessor functions ifnet_byindex(), ifaddr_byindex(), > : ifdev_byindex() to replace existing accessor macros. These functions > : now acquire the ifnet lock before derefencing the table. > : - Add IFNET_WLOCK_ASSERT(). > : - Add static accessor functions ifnet_setbyindex(), ifdev_setbyindex(), > : which set values in the table either asserting of acquiring the ifnet > : lock. > : - Use accessor functions throughout if.c to modify and read > : ifindex_table. > : - Rework ifnet attach/detach to lock around ifindex_table modification. > : > : Note that these changes simply close races around use of ifindex_table, > : and make no attempt to solve the probem of disappearing ifnets. Further > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > : refinement of this work, including with respect to ifindex_table > : resizing, is still required. > : > : In a future change, the ifnet lock should be converted from a mutex to an > : rwlock in order to reduce contention. > : > : Reviewed and tested by: brooks > > > Cheers, > -- > Ruslan Ermilov > ru@FreeBSD.org > FreeBSD committer >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.BSF.2.00.0904252015340.91546>