Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: sched: fix ordering of qlen adjustment

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>

authored by

Lion Ackermann and committed by
David S. Miller
5eb7de8c 29220780

+2 -2
+1 -1
net/sched/sch_cake.c
··· 1525 1525 b->backlogs[idx] -= len; 1526 1526 b->tin_backlog -= len; 1527 1527 sch->qstats.backlog -= len; 1528 - qdisc_tree_reduce_backlog(sch, 1, len); 1529 1528 1530 1529 flow->dropped++; 1531 1530 b->tin_dropped++; ··· 1535 1536 1536 1537 __qdisc_drop(skb, to_free); 1537 1538 sch->q.qlen--; 1539 + qdisc_tree_reduce_backlog(sch, 1, len); 1538 1540 1539 1541 cake_heapify(q, 0); 1540 1542
+1 -1
net/sched/sch_choke.c
··· 123 123 if (idx == q->tail) 124 124 choke_zap_tail_holes(q); 125 125 126 + --sch->q.qlen; 126 127 qdisc_qstats_backlog_dec(sch, skb); 127 128 qdisc_tree_reduce_backlog(sch, 1, qdisc_pkt_len(skb)); 128 129 qdisc_drop(skb, sch, to_free); 129 - --sch->q.qlen; 130 130 } 131 131 132 132 struct choke_skb_cb {