SEARCH  

NEWS

2010.10.06:11:36:28
Samochód w firmie - dodatek CD do Dziennika Gazety Prawnej
W środę, 6 października do „Dziennika Gazety Prawnej” dołączona zostanie płyta w całości poświęcona zagadnieniu użytkowania auta w firmie.

 

messageID:505560007619
author:Hagen Paul Pfeifer
title:Re PATCH 1 1 sched add head drop fifo que
Hagen Paul Pfeifer wrote, On 01/18/2010 05:44 PM: This add an additional queuing strategy, called pfifo_head_drop, "This adds"... to remove the oldest skb in the case of an overflow within the queue - the head element - instead of the last skb (tail). To remove the oldest skb in a congested situations is useful for sensor network environments "skb in congested situations"... where newer packets reflects the superior information. "where newer packets reflect"... Reviewed-by: Florian Westphal <fw@xxxxxxxxx Acked-by: Patrick McHardy <kaber@xxxxxxxxx Signed-off-by: Hagen Paul Pfeifer <hagen@xxxxxxxx --- include/net/pkt_sched.h | 1 + net/sched/sch_api.c | 1 + net/sched/sch_fifo.c | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 0 deletions(-) ... +static int pfifo_front_enqueue(struct sk_buff *skb, struct Qdisc* sch) Why do you call it "front_enqueue" if always does "enqueue_tail"? Btw, usually these methods take name from the qdisc. +{ + struct sk_buff *skb_head; + struct fifo_sched_data *q = qdisc_priv(sch); + + if (likely(skb_queue_len(&sch- q) < q- limit)) + return qdisc_enqueue_tail(skb, sch); + + /* queue full, remove one skb to fulfill the limit */ + skb_head = qdisc_dequeue_head(sch); + sch- bstats.bytes -= qdisc_pkt_len(skb_head); + sch- bstats.packets--; + sch- q.qlen--; I dont think this is needed; qdisc_dequeue_head() updated it already. + sch- qstats.drops++; + kfree_skb(skb_head); + + qdisc_enqueue_tail(skb, sch); + + return NET_XMIT_CN; +} + + static int fifo_init(struct Qdisc *sch, struct nlattr *opt) { struct fifo_sched_data *q = qdisc_priv(sch); @@ -108,6 +130,20 @@ struct Qdisc_ops bfifo_qdisc_ops __read_mostly = { }; EXPORT_SYMBOL(bfifo_qdisc_ops); +struct Qdisc_ops pfifo_head_drop_qdisc_ops __read_mostly = { + .id = "pfifo_head_drop", + .priv_size = sizeof(struct fifo_sched_data), + .enqueue = pfifo_front_enqueue, + .dequeue = qdisc_dequeue_head, + .peek = qdisc_peek_head, + .drop = qdisc_queue_drop, Probably it isnt used much, but it seems for consistency this drop should be implemented as a head drop. Jarek P. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at rel="nofollow" vger.kernel.org/majordomo-info.html vger.kernel.org/majordomo-info.html
Index