summaryrefslogtreecommitdiff
path: root/include/linux/igmp.h
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2013-06-07 08:48:57 -0700
committerDavid S. Miller <davem@davemloft.net>2013-06-12 00:25:23 -0700
commite9897071350bd9d94a56b5b6f79c85b1a98fc7e7 (patch)
treed01026afb4450ef685722cd7a0fe1815336170ca /include/linux/igmp.h
parent64153ce0a7b61b2a5cacb01805cbf670142339e9 (diff)
downloadlinux-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.h1
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;