qdisc_destroy() calls ops->reset() and cleans up qdisc->gso_skb
and qdisc->skb_bad_txq, these are nearly same with qdisc_reset(),
so just call it directly, and cosolidate the code for the next
patch.

Cc: Jamal Hadi Salim <[email protected]>
Cc: Jiri Pirko <[email protected]>
Signed-off-by: Cong Wang <[email protected]>
---
 net/sched/sch_generic.c | 16 +++-------------
 1 file changed, 3 insertions(+), 13 deletions(-)

diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
index ebc55d884247..7a0b06001e48 100644
--- a/net/sched/sch_generic.c
+++ b/net/sched/sch_generic.c
@@ -949,7 +949,6 @@ static void qdisc_free_cb(struct rcu_head *head)
 static void qdisc_destroy(struct Qdisc *qdisc)
 {
        const struct Qdisc_ops  *ops = qdisc->ops;
-       struct sk_buff *skb, *tmp;
 
 #ifdef CONFIG_NET_SCHED
        qdisc_hash_del(qdisc);
@@ -957,24 +956,15 @@ static void qdisc_destroy(struct Qdisc *qdisc)
        qdisc_put_stab(rtnl_dereference(qdisc->stab));
 #endif
        gen_kill_estimator(&qdisc->rate_est);
-       if (ops->reset)
-               ops->reset(qdisc);
+
+       qdisc_reset(qdisc);
+
        if (ops->destroy)
                ops->destroy(qdisc);
 
        module_put(ops->owner);
        dev_put(qdisc_dev(qdisc));
 
-       skb_queue_walk_safe(&qdisc->gso_skb, skb, tmp) {
-               __skb_unlink(skb, &qdisc->gso_skb);
-               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);
-       }
-
        call_rcu(&qdisc->rcu, qdisc_free_cb);
 }
 
-- 
2.26.2

Reply via email to