Re: [Patch net-next v2 2/4] net_sched: update hierarchical backlog too
From: Eric Dumazet <hidden>
Date: 2015-10-30 19:30:52
On Fri, 2015-10-30 at 11:22 -0700, Cong Wang wrote:
When the bottom qdisc decides to, for example, drop some packet, it calls qdisc_tree_decrease_qlen() to update the queue length for all its ancestors, we need to update the backlog too to keep the stats on root qdisc accurate. Cc: Jamal Hadi Salim <jhs@mojatatu.com> Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> Signed-off-by: Cong Wang <redacted>
...
quoted hunk ↗ jump to hunk
diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c index 3abab53..498f0a2 100644 --- a/net/sched/sch_sfq.c +++ b/net/sched/sch_sfq.c@@ -346,7 +346,7 @@ static int sfq_enqueue(struct sk_buff *skb, struct Qdisc *sch) { struct sfq_sched_data *q = qdisc_priv(sch); - unsigned int hash; + unsigned int hash, dropped; sfq_index x, qlen; struct sfq_slot *slot; int uninitialized_var(ret);@@ -461,7 +461,7 @@ sfq_enqueue(struct sk_buff *skb, struct Qdisc *sch) return NET_XMIT_SUCCESS; qlen = slot->qlen; - sfq_drop(sch); + dropped = sfq_drop(sch); /* Return Congestion Notification only if we dropped a packet * from this flow. */@@ -469,7 +469,7 @@ sfq_enqueue(struct sk_buff *skb, struct Qdisc *sch) return NET_XMIT_CN;
I believe you missed the NET_XMIT_CN cases. SFQ can drop a prior packet, and queue current packet. qdisc_tree_reduce_backlog() wont be called to update parents. Not sure about other qdisc(s)