From: Jarek Poplawski <jarkao2@gmail.com>
To: Hagen Paul Pfeifer <hagen@jauu.net>
Cc: netdev@vger.kernel.org, kaber@trash.net, davem@davemloft.net
Subject: Re: [PATCH 1/1] sched: add head drop fifo queue
Date: Mon, 18 Jan 2010 20:25:17 +0100 [thread overview]
Message-ID: <4B54B59D.5010108@gmail.com> (raw)
In-Reply-To: <1263833050-11635-1-git-send-email-hagen@jauu.net>
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@strlen.de>
> Acked-by: Patrick McHardy <kaber@trash.net>
> Signed-off-by: Hagen Paul Pfeifer <hagen@jauu.net>
> ---
> 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 don't 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 isn't used much, but it seems for consistency this drop
should be implemented as a head drop.
Jarek P.
next prev parent reply other threads:[~2010-01-18 19:25 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-18 13:21 [PATCH 1/1] sched: add head drop fifo queue Hagen Paul Pfeifer
2010-01-18 14:24 ` Patrick McHardy
2010-01-18 16:27 ` Hagen Paul Pfeifer
2010-01-18 16:32 ` Hagen Paul Pfeifer
2010-01-18 16:30 ` Hagen Paul Pfeifer
2010-01-18 16:34 ` Patrick McHardy
2010-01-18 16:44 ` Hagen Paul Pfeifer
2010-01-18 19:25 ` Jarek Poplawski [this message]
2010-01-18 19:36 ` Hagen Paul Pfeifer
2010-01-18 19:51 ` Jarek Poplawski
2010-01-18 19:59 ` Hagen Paul Pfeifer
2010-01-18 20:27 ` [PATCH V2] " Hagen Paul Pfeifer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4B54B59D.5010108@gmail.com \
--to=jarkao2@gmail.com \
--cc=davem@davemloft.net \
--cc=hagen@jauu.net \
--cc=kaber@trash.net \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.