cvs commit: src/sys/net if.c if_var.h

Robert Watson rwatson at FreeBSD.org
Thu Jun 26 23:05:32 UTC 2008


rwatson     2008-06-26 23:05:28 UTC

  FreeBSD src repository

  Modified files:
    sys/net              if.c if_var.h 
  Log:
  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
  
  Revision  Changes    Path
  1.281     +69 -12    src/sys/net/if.c
  1.119     +4 -4      src/sys/net/if_var.h


More information about the cvs-src mailing list