On Tue, Mar 1, 2016 at 8:10 PM, Kyeong Yoo <kyeong....@alliedtelesis.co.nz> wrote: > This fix is for dsmark similar to 3557619f0f6f7496ed453d4825e24958ab1884e0, > 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.
This part looks reasonable to me. > > Also replaced dsmark peek to use qdisc_peek_dequeued() which works correctly > if previously peeked skb still exists. But not this part, since sfq already calls qdisc_peek_dequeued()?