diff options
author | Nikolay Aleksandrov <nikolay@cumulusnetworks.com> | 2017-02-04 18:05:07 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-02-06 22:53:13 -0500 |
commit | f7cdee8a79a1cb03fa9ca71b825e72f880b344e1 (patch) | |
tree | bda0a6e29e0d7748d2f7e59a8da9c5194f486b36 /net/bridge/br_sysfs_br.c | |
parent | 1f90c7f3470580e24da25f6a6c1fb480ed9371ac (diff) | |
download | op-kernel-dev-f7cdee8a79a1cb03fa9ca71b825e72f880b344e1.zip op-kernel-dev-f7cdee8a79a1cb03fa9ca71b825e72f880b344e1.tar.gz |
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_sysfs_br.c')
-rw-r--r-- | net/bridge/br_sysfs_br.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/bridge/br_sysfs_br.c b/net/bridge/br_sysfs_br.c index a181482..0f40349 100644 --- a/net/bridge/br_sysfs_br.c +++ b/net/bridge/br_sysfs_br.c @@ -263,7 +263,7 @@ static ssize_t gc_timer_show(struct device *d, struct device_attribute *attr, char *buf) { struct net_bridge *br = to_bridge(d); - return sprintf(buf, "%ld\n", br_timer_value(&br->gc_timer)); + return sprintf(buf, "%ld\n", br_timer_value(&br->gc_work.timer)); } static DEVICE_ATTR_RO(gc_timer); |