net_sched: use qdisc_reset() in qdisc_destroy()
authorCong Wang <xiyou.wangcong@gmail.com>
Wed, 27 May 2020 04:35:23 +0000 (21:35 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 27 May 2020 22:05:49 +0000 (15:05 -0700)
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 <jhs@mojatatu.com>
Cc: Jiri Pirko <jiri@resnulli.us>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/sch_generic.c

index ebc55d8..7a0b060 100644 (file)
@@ -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);
 }