mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-29 10:01:25 +00:00
igmp: RCU conversion of in_dev->mc_list
in_dev->mc_list is protected by one rwlock (in_dev->mc_list_lock). This can easily be converted to a RCU protection. Writers hold RTNL, so mc_list_lock is removed, not replaced by a spinlock. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Cc: Cypher Wu <cypher.w@gmail.com> Cc: Américo Wang <xiyou.wangcong@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f5539b5bfa
commit
1d7138de87
4 changed files with 115 additions and 127 deletions
|
@ -167,10 +167,10 @@ struct ip_sf_socklist {
|
|||
*/
|
||||
|
||||
struct ip_mc_socklist {
|
||||
struct ip_mc_socklist *next;
|
||||
struct ip_mc_socklist __rcu *next_rcu;
|
||||
struct ip_mreqn multi;
|
||||
unsigned int sfmode; /* MCAST_{INCLUDE,EXCLUDE} */
|
||||
struct ip_sf_socklist *sflist;
|
||||
struct ip_sf_socklist __rcu *sflist;
|
||||
struct rcu_head rcu;
|
||||
};
|
||||
|
||||
|
@ -186,11 +186,14 @@ struct ip_sf_list {
|
|||
struct ip_mc_list {
|
||||
struct in_device *interface;
|
||||
__be32 multiaddr;
|
||||
unsigned int sfmode;
|
||||
struct ip_sf_list *sources;
|
||||
struct ip_sf_list *tomb;
|
||||
unsigned int sfmode;
|
||||
unsigned long sfcount[2];
|
||||
struct ip_mc_list *next;
|
||||
union {
|
||||
struct ip_mc_list *next;
|
||||
struct ip_mc_list __rcu *next_rcu;
|
||||
};
|
||||
struct timer_list timer;
|
||||
int users;
|
||||
atomic_t refcnt;
|
||||
|
@ -201,6 +204,7 @@ struct ip_mc_list {
|
|||
char loaded;
|
||||
unsigned char gsquery; /* check source marks? */
|
||||
unsigned char crcount;
|
||||
struct rcu_head rcu;
|
||||
};
|
||||
|
||||
/* V3 exponential field decoding */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue