summaryrefslogtreecommitdiff
path: root/net/sched/sch_cbs.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2019-01-16 07:12:01 +0300
committerDavid S. Miller <davem@davemloft.net>2019-01-16 07:12:01 +0300
commitd62f38c295e56147e8298af1e0e0ec9e7cc14937 (patch)
tree98e514e9a434fefc86518fe11b91f6d4429bcbdc /net/sched/sch_cbs.c
parent80b3671e9377916bf2b02e56113fa7377ce5705a (diff)
parent8c6c37fdc20ec9ffaa342f827a8e20afe736fb0c (diff)
downloadlinux-d62f38c295e56147e8298af1e0e0ec9e7cc14937.tar.xz
Merge branch 'sch_cake-leaf-qdisc-fixes'
Toke Høiland-Jørgensen says: ==================== sched: Fix qdisc interactions exposed by using sch_cake as a leaf qdisc This series fixes a couple of issues exposed by running sch_cake as a leaf qdisc in an HFSC tree, which were discovered and reported by Pete Heist. The interaction between CAKE's GSO splitting and the parent qdisc's notion of its own queue length could cause queue stalls. While investigating the report, I also noticed that several qdiscs would dereference the skb pointer after dequeue, which is potentially problematic since the GSO splitting code also frees the original skb. See the individual patches in the series for details. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched/sch_cbs.c')
-rw-r--r--net/sched/sch_cbs.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/sched/sch_cbs.c b/net/sched/sch_cbs.c
index e689e11b6d0f..c6a502933fe7 100644
--- a/net/sched/sch_cbs.c
+++ b/net/sched/sch_cbs.c
@@ -88,13 +88,14 @@ static int cbs_child_enqueue(struct sk_buff *skb, struct Qdisc *sch,
struct Qdisc *child,
struct sk_buff **to_free)
{
+ unsigned int len = qdisc_pkt_len(skb);
int err;
err = child->ops->enqueue(skb, child, to_free);
if (err != NET_XMIT_SUCCESS)
return err;
- qdisc_qstats_backlog_inc(sch, skb);
+ sch->qstats.backlog += len;
sch->q.qlen++;
return NET_XMIT_SUCCESS;