diff options
author | Florian Westphal <fw@strlen.de> | 2011-08-09 02:04:43 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-08-09 21:52:11 -0700 |
commit | 3557619f0f6f7496ed453d4825e24958ab1884e0 (patch) | |
tree | fe66b34573509d0f4880d4f03ae5cde26ff69cb3 | |
parent | 9be6dd6510fde5cfa2ab73f238754d38ee6797bc (diff) | |
download | linux-stable-3557619f0f6f7496ed453d4825e24958ab1884e0.tar.gz linux-stable-3557619f0f6f7496ed453d4825e24958ab1884e0.tar.bz2 linux-stable-3557619f0f6f7496ed453d4825e24958ab1884e0.zip |
net_sched: prio: use qdisc_dequeue_peeked
commit 07bd8df5df4369487812bf85a237322ff3569b77
(sch_sfq: fix peek() implementation) changed sfq to use generic
peek helper.
This makes HFSC complain about a non-work-conserving child qdisc, if
prio with sfq child is used within hfsc:
hfsc peeks into prio qdisc, which will then peek into sfq.
returned skb is stashed in sch->gso_skb.
Next, hfsc tries to dequeue from prio, but prio will call sfq dequeue
directly, which may return NULL instead of previously peeked-at skb.
Have prio call qdisc_dequeue_peeked, so sfq->dequeue() is
not called in this case.
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/sched/sch_prio.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/sched/sch_prio.c b/net/sched/sch_prio.c index 2a318f2dc3e5..b5d56a22b1d2 100644 --- a/net/sched/sch_prio.c +++ b/net/sched/sch_prio.c @@ -112,7 +112,7 @@ static struct sk_buff *prio_dequeue(struct Qdisc *sch) for (prio = 0; prio < q->bands; prio++) { struct Qdisc *qdisc = q->queues[prio]; - struct sk_buff *skb = qdisc->dequeue(qdisc); + struct sk_buff *skb = qdisc_dequeue_peeked(qdisc); if (skb) { qdisc_bstats_update(sch, skb); sch->q.qlen--; |