lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Sat, 2 May 2020 19:54:20 -0700 From: Eric Dumazet <edumazet@...gle.com> To: "David S . Miller" <davem@...emloft.net> Cc: netdev <netdev@...r.kernel.org>, Eric Dumazet <edumazet@...gle.com>, Eric Dumazet <eric.dumazet@...il.com> Subject: [PATCH net-next 3/5] net_sched: sch_fq: use bulk freeing in fq_gc() fq_gc() already builds a small array of pointers, so using kmem_cache_free_bulk() needs very little change. Signed-off-by: Eric Dumazet <edumazet@...gle.com> --- net/sched/sch_fq.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/net/sched/sch_fq.c b/net/sched/sch_fq.c index 7a2b3195938ede3c14c37b90c9604185cfa3f651..56e4f3c4380c517136b22862771f9899a7fd99f2 100644 --- a/net/sched/sch_fq.c +++ b/net/sched/sch_fq.c @@ -218,9 +218,10 @@ static void fq_gc(struct fq_sched_data *q, struct rb_root *root, struct sock *sk) { - struct fq_flow *f, *tofree[FQ_GC_MAX]; struct rb_node **p, *parent; - int fcnt = 0; + void *tofree[FQ_GC_MAX]; + struct fq_flow *f; + int i, fcnt = 0; p = &root->rb_node; parent = NULL; @@ -243,15 +244,18 @@ static void fq_gc(struct fq_sched_data *q, p = &parent->rb_left; } - q->flows -= fcnt; - q->inactive_flows -= fcnt; - q->stat_gc_flows += fcnt; - while (fcnt) { - struct fq_flow *f = tofree[--fcnt]; + if (!fcnt) + return; + for (i = fcnt; i > 0; ) { + f = tofree[--i]; rb_erase(&f->fq_node, root); - kmem_cache_free(fq_flow_cachep, f); } + q->flows -= fcnt; + q->inactive_flows -= fcnt; + q->stat_gc_flows += fcnt; + + kmem_cache_free_bulk(fq_flow_cachep, fcnt, tofree); } static struct fq_flow *fq_classify(struct sk_buff *skb, struct fq_sched_data *q) -- 2.26.2.526.g744177e7f7-goog
Powered by blists - more mailing lists