net: sched: introduce and use qdisc tree flush/purge helpers
The same code to flush qdisc tree and purge the qdisc queue
is duplicated in many places and in most cases it does not
respect NOLOCK qdisc: the global backlog len is used and the
per CPU values are ignored.
This change addresses the above, factoring-out the relevant
code and using the helpers introduced by the previous patch
to fetch the correct backlog len.
Fixes: c5ad119fb6
("net: sched: pfifo_fast use skb_array")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -233,8 +233,7 @@ static int red_change(struct Qdisc *sch, struct nlattr *opt,
|
||||
q->flags = ctl->flags;
|
||||
q->limit = ctl->limit;
|
||||
if (child) {
|
||||
qdisc_tree_reduce_backlog(q->qdisc, q->qdisc->q.qlen,
|
||||
q->qdisc->qstats.backlog);
|
||||
qdisc_tree_flush_backlog(q->qdisc);
|
||||
old_child = q->qdisc;
|
||||
q->qdisc = child;
|
||||
}
|
||||
|
Reference in New Issue
Block a user