git: ifnet: Make blocking operation in if_addrheads iteration MPSAFE

Sepherosa Ziehau sephe at crater.dragonflybsd.org
Sun Mar 1 21:29:46 PST 2015


commit 9a74b5922bf37459c2ab956c7ddb8cc1a54c933f
Author: Sepherosa Ziehau <sephe at dragonflybsd.org>
Date:   Wed Feb 18 21:01:15 2015 +0800

    ifnet: Make blocking operation in if_addrheads iteration MPSAFE
    
    Two methods are used:
    - Dispatch blocking operation in if_addrheads iteration to netisr0
      to run for functions which do not copy data into user space.
    - Use ifaddr marker to make sure that the ifaddr list is not broken
      if the ifaddr list is changed during the blocking operation.  And
      reference the ifaddr being used so it will not be destroyed during
      the blocking operation.

Summary of changes:
 sys/emulation/linux/linux_ioctl.c |  26 +++++-
 sys/net/if.c                      | 173 ++++++++++++++++++++++++++++++++++----
 sys/net/if_var.h                  |   9 ++
 sys/net/pf/pf_if.c                |  42 ++++++++-
 sys/net/rtsock.c                  |  41 ++++++++-
 sys/netgraph/eiface/ng_eiface.c   |  10 ++-
 sys/netgraph7/eiface/ng_eiface.c  |  10 ++-
 test/{mcast => ifconf}/Makefile   |   6 +-
 test/ifconf/ifconf.c              | 117 ++++++++++++++++++++++++++
 9 files changed, 403 insertions(+), 31 deletions(-)
 copy test/{mcast => ifconf}/Makefile (57%)
 create mode 100644 test/ifconf/ifconf.c

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/9a74b5922bf37459c2ab956c7ddb8cc1a54c933f


-- 
DragonFly BSD source repository



More information about the Commits mailing list