rwatson at FreeBSD.org
Sat Apr 25 19:16:58 UTC 2009
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
Robert N M Watson
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
> Ruslan Ermilov
> ru at FreeBSD.org
> FreeBSD committer
More information about the freebsd-stable