diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2010-11-23 08:12:15 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-11-24 14:16:42 -0500 |
commit | 456b61bca8ee324ab6c18b065e632c9a8c88aa39 (patch) | |
tree | d1d458d78b6fffa32558ffbf7cdfc49a316a660c /include/net/if_inet6.h | |
parent | 2757a15f08adbed9480c30bdb4e9a0bbf2b6f33a (diff) |
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/net/if_inet6.h')
-rw-r--r-- | include/net/if_inet6.h | 3 |
1 files changed, 2 insertions, 1 deletions
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 { | |||
89 | struct ipv6_mc_socklist { | 89 | struct ipv6_mc_socklist { |
90 | struct in6_addr addr; | 90 | struct in6_addr addr; |
91 | int ifindex; | 91 | int ifindex; |
92 | struct ipv6_mc_socklist *next; | 92 | struct ipv6_mc_socklist __rcu *next; |
93 | rwlock_t sflock; | 93 | rwlock_t sflock; |
94 | unsigned int sfmode; /* MCAST_{INCLUDE,EXCLUDE} */ | 94 | unsigned int sfmode; /* MCAST_{INCLUDE,EXCLUDE} */ |
95 | struct ip6_sf_socklist *sflist; | 95 | struct ip6_sf_socklist *sflist; |
96 | struct rcu_head rcu; | ||
96 | }; | 97 | }; |
97 | 98 | ||
98 | struct ip6_sf_list { | 99 | struct ip6_sf_list { |