net_sched: make qdisc_reset() smaller
For some unknown reason qdisc_reset() is using a convoluted way of freeing two lists of skbs. Use __skb_queue_purge() instead. Signed-off-by: Eric Dumazet <edumazet@google.com> Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> Link: https://lore.kernel.org/r/20220414011004.2378350-1-eric.dumazet@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
31248b5a35
commit
c9a40d1c87
|
@ -1019,22 +1019,14 @@ EXPORT_SYMBOL(qdisc_create_dflt);
|
||||||
void qdisc_reset(struct Qdisc *qdisc)
|
void qdisc_reset(struct Qdisc *qdisc)
|
||||||
{
|
{
|
||||||
const struct Qdisc_ops *ops = qdisc->ops;
|
const struct Qdisc_ops *ops = qdisc->ops;
|
||||||
struct sk_buff *skb, *tmp;
|
|
||||||
|
|
||||||
trace_qdisc_reset(qdisc);
|
trace_qdisc_reset(qdisc);
|
||||||
|
|
||||||
if (ops->reset)
|
if (ops->reset)
|
||||||
ops->reset(qdisc);
|
ops->reset(qdisc);
|
||||||
|
|
||||||
skb_queue_walk_safe(&qdisc->gso_skb, skb, tmp) {
|
__skb_queue_purge(&qdisc->gso_skb);
|
||||||
__skb_unlink(skb, &qdisc->gso_skb);
|
__skb_queue_purge(&qdisc->skb_bad_txq);
|
||||||
kfree_skb_list(skb);
|
|
||||||
}
|
|
||||||
|
|
||||||
skb_queue_walk_safe(&qdisc->skb_bad_txq, skb, tmp) {
|
|
||||||
__skb_unlink(skb, &qdisc->skb_bad_txq);
|
|
||||||
kfree_skb_list(skb);
|
|
||||||
}
|
|
||||||
|
|
||||||
qdisc->q.qlen = 0;
|
qdisc->q.qlen = 0;
|
||||||
qdisc->qstats.backlog = 0;
|
qdisc->qstats.backlog = 0;
|
||||||
|
|
Loading…
Reference in New Issue