sched: add head drop fifo queue
This adds an additional queuing strategy, called pfifo_head_drop, 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 congested situations is useful for sensor network environments where newer packets reflect the superior information. Reviewed-by: Florian Westphal <fw@strlen.de> Acked-by: Patrick McHardy <kaber@trash.net> Signed-off-by: Hagen Paul Pfeifer <hagen@jauu.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
d74340d31b
commit
57dbb2d83d
@@ -427,6 +427,25 @@ static inline struct sk_buff *qdisc_dequeue_head(struct Qdisc *sch)
|
||||
return __qdisc_dequeue_head(sch, &sch->q);
|
||||
}
|
||||
|
||||
static inline unsigned int __qdisc_queue_drop_head(struct Qdisc *sch,
|
||||
struct sk_buff_head *list)
|
||||
{
|
||||
struct sk_buff *skb = __qdisc_dequeue_head(sch, list);
|
||||
|
||||
if (likely(skb != NULL)) {
|
||||
unsigned int len = qdisc_pkt_len(skb);
|
||||
kfree_skb(skb);
|
||||
return len;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline unsigned int qdisc_queue_drop_head(struct Qdisc *sch)
|
||||
{
|
||||
return __qdisc_queue_drop_head(sch, &sch->q);
|
||||
}
|
||||
|
||||
static inline struct sk_buff *__qdisc_dequeue_tail(struct Qdisc *sch,
|
||||
struct sk_buff_head *list)
|
||||
{
|
||||
|
Reference in New Issue
Block a user