mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-01 10:42:11 +00:00
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@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7ba0537c2b
commit
82a0aa53b5
@ -214,9 +214,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;
|
||||
@ -239,15 +240,18 @@ static void fq_gc(struct fq_sched_data *q,
|
||||
p = &parent->rb_left;
|
||||
}
|
||||
|
||||
if (!fcnt)
|
||||
return;
|
||||
|
||||
for (i = fcnt; i > 0; ) {
|
||||
f = tofree[--i];
|
||||
rb_erase(&f->fq_node, root);
|
||||
}
|
||||
q->flows -= fcnt;
|
||||
q->inactive_flows -= fcnt;
|
||||
q->stat_gc_flows += fcnt;
|
||||
while (fcnt) {
|
||||
struct fq_flow *f = tofree[--fcnt];
|
||||
|
||||
rb_erase(&f->fq_node, root);
|
||||
kmem_cache_free(fq_flow_cachep, f);
|
||||
}
|
||||
kmem_cache_free_bulk(fq_flow_cachep, fcnt, tofree);
|
||||
}
|
||||
|
||||
static struct fq_flow *fq_classify(struct sk_buff *skb, struct fq_sched_data *q)
|
||||
|
Loading…
Reference in New Issue
Block a user