diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2010-11-23 13:12:15 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-11-24 11:16:42 -0800 |
commit | 456b61bca8ee324ab6c18b065e632c9a8c88aa39 (patch) | |
tree | d1d458d78b6fffa32558ffbf7cdfc49a316a660c /include | |
parent | 2757a15f08adbed9480c30bdb4e9a0bbf2b6f33a (diff) | |
download | lwn-456b61bca8ee324ab6c18b065e632c9a8c88aa39.tar.gz lwn-456b61bca8ee324ab6c18b065e632c9a8c88aa39.zip |
ipv6: mcast: RCU conversion
ipv6_sk_mc_lock rwlock becomes a spinlock.
readers (inet6_mc_check()) now takes rcu_read_lock() instead of read
lock. Writers dont need to disable BH anymore.
struct ipv6_mc_socklist objects are reclaimed after one RCU grace
period.
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/ipv6.h | 2 | ||||
-rw-r--r-- | include/net/if_inet6.h | 3 |
2 files changed, 3 insertions, 2 deletions
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h index 8e429d0e0405..0c997767429a 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h @@ -364,7 +364,7 @@ struct ipv6_pinfo { __u32 dst_cookie; - struct ipv6_mc_socklist *ipv6_mc_list; + struct ipv6_mc_socklist __rcu *ipv6_mc_list; struct ipv6_ac_socklist *ipv6_ac_list; struct ipv6_fl_socklist *ipv6_fl_list; diff --git a/include/net/if_inet6.h b/include/net/if_inet6.h index f95ff8d9aa47..04977eefb0ee 100644 --- a/include/net/if_inet6.h +++ b/include/net/if_inet6.h @@ -89,10 +89,11 @@ struct ip6_sf_socklist { struct ipv6_mc_socklist { struct in6_addr addr; int ifindex; - struct ipv6_mc_socklist *next; + struct ipv6_mc_socklist __rcu *next; rwlock_t sflock; unsigned int sfmode; /* MCAST_{INCLUDE,EXCLUDE} */ struct ip6_sf_socklist *sflist; + struct rcu_head rcu; }; struct ip6_sf_list { |