Skip to content

Commit

Permalink
net_sched: sch_fq: use bulk freeing in fq_gc()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Eric Dumazet authored and David S. Miller committed May 3, 2020
1 parent 7ba0537 commit 82a0aa5
Showing 1 changed file with 11 additions and 7 deletions.
18 changes: 11 additions & 7 deletions net/sched/sch_fq.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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)
Expand Down

0 comments on commit 82a0aa5

Please sign in to comment.