diff options
author | Eric Dumazet <edumazet@google.com> | 2013-06-07 08:48:57 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-06-12 00:25:23 -0700 |
commit | e9897071350bd9d94a56b5b6f79c85b1a98fc7e7 (patch) | |
tree | d01026afb4450ef685722cd7a0fe1815336170ca /include/linux/igmp.h | |
parent | 64153ce0a7b61b2a5cacb01805cbf670142339e9 (diff) | |
download | linux-rpi-e9897071350bd9d94a56b5b6f79c85b1a98fc7e7.tar.gz linux-rpi-e9897071350bd9d94a56b5b6f79c85b1a98fc7e7.tar.bz2 linux-rpi-e9897071350bd9d94a56b5b6f79c85b1a98fc7e7.zip |
igmp: hash a hash table to speedup ip_check_mc_rcu()
After IP route cache removal, multicast applications using
a lot of multicast addresses hit a O(N) behavior in ip_check_mc_rcu()
Add a per in_device hash table to get faster lookup.
This hash table is created only if the number of items in mc_list is
above 4.
Reported-by: Shawn Bohrer <sbohrer@rgmadvisors.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Tested-by: Shawn Bohrer <sbohrer@rgmadvisors.com>
Reviewed-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/igmp.h')
-rw-r--r-- | include/linux/igmp.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/igmp.h b/include/linux/igmp.h index 7f2bf1518480..e3362b5f13e8 100644 --- a/include/linux/igmp.h +++ b/include/linux/igmp.h @@ -84,6 +84,7 @@ struct ip_mc_list { struct ip_mc_list *next; struct ip_mc_list __rcu *next_rcu; }; + struct ip_mc_list __rcu *next_hash; struct timer_list timer; int users; atomic_t refcnt; |