mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 18:41:58 +09:00
net: sched: fix ordering of qlen adjustment
commit 5eb7de8cd58e73851cd37ff8d0666517d9926948 upstream. Changes to sch->q.qlen around qdisc_tree_reduce_backlog() need to happen _before_ a call to said function because otherwise it may fail to notify parent qdiscs when the child is about to become empty. Signed-off-by: Lion Ackermann <nnamrec@gmail.com> Acked-by: Toke Høiland-Jørgensen <toke@toke.dk> Signed-off-by: David S. Miller <davem@davemloft.net> Cc: Artem Metla <ametla@google.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
29f02ec58a
commit
489422e2be
@@ -1541,7 +1541,6 @@ static unsigned int cake_drop(struct Qdisc *sch, struct sk_buff **to_free)
|
|||||||
b->backlogs[idx] -= len;
|
b->backlogs[idx] -= len;
|
||||||
b->tin_backlog -= len;
|
b->tin_backlog -= len;
|
||||||
sch->qstats.backlog -= len;
|
sch->qstats.backlog -= len;
|
||||||
qdisc_tree_reduce_backlog(sch, 1, len);
|
|
||||||
|
|
||||||
flow->dropped++;
|
flow->dropped++;
|
||||||
b->tin_dropped++;
|
b->tin_dropped++;
|
||||||
@@ -1552,6 +1551,7 @@ static unsigned int cake_drop(struct Qdisc *sch, struct sk_buff **to_free)
|
|||||||
|
|
||||||
__qdisc_drop(skb, to_free);
|
__qdisc_drop(skb, to_free);
|
||||||
sch->q.qlen--;
|
sch->q.qlen--;
|
||||||
|
qdisc_tree_reduce_backlog(sch, 1, len);
|
||||||
|
|
||||||
cake_heapify(q, 0);
|
cake_heapify(q, 0);
|
||||||
|
|
||||||
|
|||||||
@@ -123,10 +123,10 @@ static void choke_drop_by_idx(struct Qdisc *sch, unsigned int idx,
|
|||||||
if (idx == q->tail)
|
if (idx == q->tail)
|
||||||
choke_zap_tail_holes(q);
|
choke_zap_tail_holes(q);
|
||||||
|
|
||||||
|
--sch->q.qlen;
|
||||||
qdisc_qstats_backlog_dec(sch, skb);
|
qdisc_qstats_backlog_dec(sch, skb);
|
||||||
qdisc_tree_reduce_backlog(sch, 1, qdisc_pkt_len(skb));
|
qdisc_tree_reduce_backlog(sch, 1, qdisc_pkt_len(skb));
|
||||||
qdisc_drop(skb, sch, to_free);
|
qdisc_drop(skb, sch, to_free);
|
||||||
--sch->q.qlen;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct choke_skb_cb {
|
struct choke_skb_cb {
|
||||||
|
|||||||
Reference in New Issue
Block a user