From 2e60391e2030bde8e1a3b1ccfdb415727420aa1d Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Tue, 18 Nov 2003 01:23:37 -0800 Subject: [PATCH] [NET SCHED]: Adjust qlen when grafting in multiple qdiscs --- net/sched/sch_cbq.c | 1 + net/sched/sch_dsmark.c | 1 + net/sched/sch_prio.c | 1 + net/sched/sch_tbf.c | 2 ++ 4 files changed, 5 insertions(+) diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c index f7e5bef816dd0..d30c5f38ba97f 100644 --- a/net/sched/sch_cbq.c +++ b/net/sched/sch_cbq.c @@ -1670,6 +1670,7 @@ static int cbq_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new, sch_tree_lock(sch); *old = cl->q; cl->q = new; + sch->q.qlen -= (*old)->q.qlen; qdisc_reset(*old); sch_tree_unlock(sch); diff --git a/net/sched/sch_dsmark.c b/net/sched/sch_dsmark.c index ec9837bb9e5dd..8db00228c0a42 100644 --- a/net/sched/sch_dsmark.c +++ b/net/sched/sch_dsmark.c @@ -77,6 +77,7 @@ static int dsmark_graft(struct Qdisc *sch,unsigned long arg, *old = xchg(&p->q,new); if (*old) qdisc_reset(*old); + sch->q.qlen = 0; sch_tree_unlock(sch); /* @@@ move up ? */ return 0; } diff --git a/net/sched/sch_prio.c b/net/sched/sch_prio.c index c09a7f95050a8..7691f8ab78f2b 100644 --- a/net/sched/sch_prio.c +++ b/net/sched/sch_prio.c @@ -266,6 +266,7 @@ static int prio_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new, sch_tree_lock(sch); *old = q->queues[band]; q->queues[band] = new; + sch->q.qlen -= (*old)->q.qlen; qdisc_reset(*old); sch_tree_unlock(sch); diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c index c115df7521631..3fe6f4f37c7c3 100644 --- a/net/sched/sch_tbf.c +++ b/net/sched/sch_tbf.c @@ -455,6 +455,8 @@ static int tbf_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new, sch_tree_lock(sch); *old = xchg(&q->qdisc, new); qdisc_reset(*old); + sch->q.qlen = 0; + sch->stats.backlog = 0; sch_tree_unlock(sch); return 0; -- 2.53.0