diff options
author | WANG Cong <xiyou.wangcong@gmail.com> | 2016-06-01 19:15:18 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-06-03 19:24:04 -0400 |
commit | d7f4f332f082c4d4ba53582f902ed6b44fd6f45e (patch) | |
tree | a2ef9cf4373af9b402f97edf2b212975ef20cc4a /net | |
parent | 6a73b571b63075ef408c83f07c2565b5652f93cc (diff) |
sch_red: update backlog as well
Fixes: 2ccccf5fb43f ("net_sched: update hierarchical backlog too")
Cc: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/sched/sch_red.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/net/sched/sch_red.c b/net/sched/sch_red.c index 8c0508c0e287..91578bdd378c 100644 --- a/net/sched/sch_red.c +++ b/net/sched/sch_red.c | |||
@@ -97,6 +97,7 @@ static int red_enqueue(struct sk_buff *skb, struct Qdisc *sch) | |||
97 | 97 | ||
98 | ret = qdisc_enqueue(skb, child); | 98 | ret = qdisc_enqueue(skb, child); |
99 | if (likely(ret == NET_XMIT_SUCCESS)) { | 99 | if (likely(ret == NET_XMIT_SUCCESS)) { |
100 | qdisc_qstats_backlog_inc(sch, skb); | ||
100 | sch->q.qlen++; | 101 | sch->q.qlen++; |
101 | } else if (net_xmit_drop_count(ret)) { | 102 | } else if (net_xmit_drop_count(ret)) { |
102 | q->stats.pdrop++; | 103 | q->stats.pdrop++; |
@@ -118,6 +119,7 @@ static struct sk_buff *red_dequeue(struct Qdisc *sch) | |||
118 | skb = child->dequeue(child); | 119 | skb = child->dequeue(child); |
119 | if (skb) { | 120 | if (skb) { |
120 | qdisc_bstats_update(sch, skb); | 121 | qdisc_bstats_update(sch, skb); |
122 | qdisc_qstats_backlog_dec(sch, skb); | ||
121 | sch->q.qlen--; | 123 | sch->q.qlen--; |
122 | } else { | 124 | } else { |
123 | if (!red_is_idling(&q->vars)) | 125 | if (!red_is_idling(&q->vars)) |
@@ -143,6 +145,7 @@ static unsigned int red_drop(struct Qdisc *sch) | |||
143 | if (child->ops->drop && (len = child->ops->drop(child)) > 0) { | 145 | if (child->ops->drop && (len = child->ops->drop(child)) > 0) { |
144 | q->stats.other++; | 146 | q->stats.other++; |
145 | qdisc_qstats_drop(sch); | 147 | qdisc_qstats_drop(sch); |
148 | sch->qstats.backlog -= len; | ||
146 | sch->q.qlen--; | 149 | sch->q.qlen--; |
147 | return len; | 150 | return len; |
148 | } | 151 | } |
@@ -158,6 +161,7 @@ static void red_reset(struct Qdisc *sch) | |||
158 | struct red_sched_data *q = qdisc_priv(sch); | 161 | struct red_sched_data *q = qdisc_priv(sch); |
159 | 162 | ||
160 | qdisc_reset(q->qdisc); | 163 | qdisc_reset(q->qdisc); |
164 | sch->qstats.backlog = 0; | ||
161 | sch->q.qlen = 0; | 165 | sch->q.qlen = 0; |
162 | red_restart(&q->vars); | 166 | red_restart(&q->vars); |
163 | } | 167 | } |