* [PATCH 5/9]: sch_netem: Use requeue list instead of ops->requeue()
@ 2008-08-18 8:37 David Miller
2008-08-19 17:36 ` Bastian Bloessl
0 siblings, 1 reply; 2+ messages in thread
From: David Miller @ 2008-08-18 8:37 UTC (permalink / raw)
To: netdev; +Cc: jarkao2
sch_netem: Use requeue list instead of ops->requeue()
This code just wants to make this packet the "front" one, and that's
just as simply done by queueing to the ->requeue list.
Signed-off-by: David S. Miller <davem@davemloft.net>
---
net/sched/sch_netem.c | 11 +++--------
1 files changed, 3 insertions(+), 8 deletions(-)
diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c
index dbd567f..7e15c0b 100644
--- a/net/sched/sch_netem.c
+++ b/net/sched/sch_netem.c
@@ -233,7 +233,8 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch)
*/
cb->time_to_send = psched_get_time();
q->counter = 0;
- ret = q->qdisc->ops->requeue(skb, q->qdisc);
+ __skb_queue_tail(&q->qdisc->requeue, skb);
+ ret = NET_XMIT_SUCCESS;
}
if (likely(ret == NET_XMIT_SUCCESS)) {
@@ -295,13 +296,7 @@ static struct sk_buff *netem_dequeue(struct Qdisc *sch)
return skb;
}
- if (unlikely(q->qdisc->ops->requeue(skb, q->qdisc) != NET_XMIT_SUCCESS)) {
- qdisc_tree_decrease_qlen(q->qdisc, 1);
- sch->qstats.drops++;
- printk(KERN_ERR "netem: %s could not requeue\n",
- q->qdisc->ops->id);
- }
-
+ __skb_queue_tail(&q->qdisc->requeue, skb);
qdisc_watchdog_schedule(&q->watchdog, cb->time_to_send);
}
--
1.5.6.5.GIT
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH 5/9]: sch_netem: Use requeue list instead of ops->requeue()
2008-08-18 8:37 [PATCH 5/9]: sch_netem: Use requeue list instead of ops->requeue() David Miller
@ 2008-08-19 17:36 ` Bastian Bloessl
0 siblings, 0 replies; 2+ messages in thread
From: Bastian Bloessl @ 2008-08-19 17:36 UTC (permalink / raw)
To: David Miller; +Cc: netdev, jarkao2
David Miller wrote:
> sch_netem: Use requeue list instead of ops->requeue()
>
> This code just wants to make this packet the "front" one, and that's
> just as simply done by queueing to the ->requeue list.
>
Hi,
I think that might make some difference.
Suppose we have an upper qdisc that dequeues from netem and
puts the packet in it's requeue-list. But after that another
packet could arrive that should be send earlier (delay
distribution, reordering).
As far as I understand it the requeued packet would now
be send before the other.
> --- a/net/sched/sch_netem.c
> +++ b/net/sched/sch_netem.c
> @@ -233,7 +233,8 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch)
> */
> cb->time_to_send = psched_get_time();
> q->counter = 0;
> - ret = q->qdisc->ops->requeue(skb, q->qdisc);
> + __skb_queue_tail(&q->qdisc->requeue, skb);
I think this should be __skb_queue_head() because in it's
requeue-list netem has packets that it doesn't want to send yet. So
their time_to_send is likely to be in the future. But reordered
packets have current time as time_to_send.
Or did I get it wrong?
Regards
Bastian Bloessl
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2008-08-19 17:59 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-08-18 8:37 [PATCH 5/9]: sch_netem: Use requeue list instead of ops->requeue() David Miller
2008-08-19 17:36 ` Bastian Bloessl
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).