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 <j...@mojatatu.com> > Acked-by: Jamal Hadi Salim <j...@mojatatu.com> > Signed-off-by: Cong Wang <xiyou.wangc...@gmail.com>
... > > 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) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html