diff options
author | Kyeong Yoo <Kyeong.Yoo@alliedtelesis.co.nz> | 2016-03-07 07:07:57 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-03-08 22:35:13 +0300 |
commit | f8b33d8e870758ccff13e5f81fd5050b52a42d35 (patch) | |
tree | 4d38ca0aff08cc8aa392761d465c3fa232e65ff1 /net/sched | |
parent | 4c38cd61aef20fce34c669caa901634ca5f88bf8 (diff) | |
download | linux-f8b33d8e870758ccff13e5f81fd5050b52a42d35.tar.xz |
net_sched: dsmark: use qdisc_dequeue_peeked()
This fix is for dsmark similar to commit 3557619f0f6f7496ed453d4825e249
("net_sched: prio: use qdisc_dequeue_peeked")
and makes use of qdisc_dequeue_peeked() instead of direct dequeue() call.
First time, wrr peeks dsmark, which will then peek into sfq.
sfq dequeues an skb and it's stored in sch->gso_skb.
Next time, wrr tries to dequeue from dsmark, which will call sfq dequeue
directly. This results skipping the previously peeked skb.
So changed dsmark dequeue to call qdisc_dequeue_peeked() instead to use
peeked skb if exists.
Signed-off-by: Kyeong Yoo <kyeong.yoo@alliedtelesis.co.nz>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched')
-rw-r--r-- | net/sched/sch_dsmark.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/sched/sch_dsmark.c b/net/sched/sch_dsmark.c index d0dff0cd8186..34b4ddaca27c 100644 --- a/net/sched/sch_dsmark.c +++ b/net/sched/sch_dsmark.c @@ -276,7 +276,7 @@ static struct sk_buff *dsmark_dequeue(struct Qdisc *sch) pr_debug("%s(sch %p,[qdisc %p])\n", __func__, sch, p); - skb = p->q->ops->dequeue(p->q); + skb = qdisc_dequeue_peeked(p->q); if (skb == NULL) return NULL; |