path: root/net/bridge/br_ioctl.c
diff options
authorNikolay Aleksandrov <nikolay@cumulusnetworks.com>2017-02-04 18:05:07 +0100
committerDavid S. Miller <davem@davemloft.net>2017-02-06 22:53:13 -0500
commitf7cdee8a79a1cb03fa9ca71b825e72f880b344e1 (patch)
treebda0a6e29e0d7748d2f7e59a8da9c5194f486b36 /net/bridge/br_ioctl.c
parentbridge: modify bridge and port to have often accessed fields in one cache line (diff)
bridge: move to workqueue gc
Move the fdb garbage collector to a workqueue which fires at least 10 milliseconds apart and cleans chain by chain allowing for other tasks to run in the meantime. When having thousands of fdbs the system is much more responsive. Most importantly remove the need to check if the matched entry has expired in __br_fdb_get that causes false-sharing and is completely unnecessary if we cleanup entries, at worst we'll get 10ms of traffic for that entry before it gets deleted. Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge/br_ioctl.c')
1 files changed, 1 insertions, 1 deletions
diff --git a/net/bridge/br_ioctl.c b/net/bridge/br_ioctl.c
index da8157c57eb1..7970f8540cbb 100644
--- a/net/bridge/br_ioctl.c
+++ b/net/bridge/br_ioctl.c
@@ -149,7 +149,7 @@ static int old_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
b.hello_timer_value = br_timer_value(&br->hello_timer);
b.tcn_timer_value = br_timer_value(&br->tcn_timer);
b.topology_change_timer_value = br_timer_value(&br->topology_change_timer);
- b.gc_timer_value = br_timer_value(&br->gc_timer);
+ b.gc_timer_value = br_timer_value(&br->gc_work.timer);
if (copy_to_user((void __user *)args[1], &b, sizeof(b)))