Commit edf7a7b1 authored by Thomas Graf's avatar Thomas Graf Committed by Thomas Graf

[PKT_SCHED]: GRED: Use generic queue management interface

Signed-off-by: default avatarThomas Graf <tgraf@suug.ch>
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@mandriva.com>
parent c3b553cd
...@@ -230,22 +230,15 @@ gred_enqueue(struct sk_buff *skb, struct Qdisc* sch) ...@@ -230,22 +230,15 @@ gred_enqueue(struct sk_buff *skb, struct Qdisc* sch)
if (q->backlog + skb->len <= q->limit) { if (q->backlog + skb->len <= q->limit) {
q->backlog += skb->len; q->backlog += skb->len;
do_enqueue: do_enqueue:
__skb_queue_tail(&sch->q, skb); return qdisc_enqueue_tail(skb, sch);
sch->qstats.backlog += skb->len;
sch->bstats.bytes += skb->len;
sch->bstats.packets++;
return 0;
} }
q->stats.pdrop++; q->stats.pdrop++;
drop: drop:
kfree_skb(skb); return qdisc_drop(skb, sch);
sch->qstats.drops++;
return NET_XMIT_DROP;
congestion_drop: congestion_drop:
kfree_skb(skb); qdisc_drop(skb, sch);
sch->qstats.drops++;
return NET_XMIT_CN; return NET_XMIT_CN;
} }
...@@ -260,11 +253,8 @@ gred_requeue(struct sk_buff *skb, struct Qdisc* sch) ...@@ -260,11 +253,8 @@ gred_requeue(struct sk_buff *skb, struct Qdisc* sch)
if (red_is_idling(&q->parms)) if (red_is_idling(&q->parms))
red_end_of_idle_period(&q->parms); red_end_of_idle_period(&q->parms);
__skb_queue_head(&sch->q, skb);
sch->qstats.backlog += skb->len;
sch->qstats.requeues++;
q->backlog += skb->len; q->backlog += skb->len;
return 0; return qdisc_requeue(skb, sch);
} }
static struct sk_buff * static struct sk_buff *
...@@ -274,9 +264,9 @@ gred_dequeue(struct Qdisc* sch) ...@@ -274,9 +264,9 @@ gred_dequeue(struct Qdisc* sch)
struct gred_sched_data *q; struct gred_sched_data *q;
struct gred_sched *t= qdisc_priv(sch); struct gred_sched *t= qdisc_priv(sch);
skb = __skb_dequeue(&sch->q); skb = qdisc_dequeue_head(sch);
if (skb) { if (skb) {
sch->qstats.backlog -= skb->len;
q= t->tab[(skb->tc_index&0xf)]; q= t->tab[(skb->tc_index&0xf)];
if (q) { if (q) {
q->backlog -= skb->len; q->backlog -= skb->len;
...@@ -307,11 +297,9 @@ static unsigned int gred_drop(struct Qdisc* sch) ...@@ -307,11 +297,9 @@ static unsigned int gred_drop(struct Qdisc* sch)
struct gred_sched_data *q; struct gred_sched_data *q;
struct gred_sched *t= qdisc_priv(sch); struct gred_sched *t= qdisc_priv(sch);
skb = __skb_dequeue_tail(&sch->q); skb = qdisc_dequeue_tail(sch);
if (skb) { if (skb) {
unsigned int len = skb->len; unsigned int len = skb->len;
sch->qstats.backlog -= len;
sch->qstats.drops++;
q= t->tab[(skb->tc_index&0xf)]; q= t->tab[(skb->tc_index&0xf)];
if (q) { if (q) {
q->backlog -= len; q->backlog -= len;
...@@ -322,7 +310,7 @@ static unsigned int gred_drop(struct Qdisc* sch) ...@@ -322,7 +310,7 @@ static unsigned int gred_drop(struct Qdisc* sch)
D2PRINTK("gred_dequeue: skb has bad tcindex %x\n",skb->tc_index&0xf); D2PRINTK("gred_dequeue: skb has bad tcindex %x\n",skb->tc_index&0xf);
} }
kfree_skb(skb); qdisc_drop(skb, sch);
return len; return len;
} }
...@@ -343,9 +331,7 @@ static void gred_reset(struct Qdisc* sch) ...@@ -343,9 +331,7 @@ static void gred_reset(struct Qdisc* sch)
struct gred_sched_data *q; struct gred_sched_data *q;
struct gred_sched *t= qdisc_priv(sch); struct gred_sched *t= qdisc_priv(sch);
__skb_queue_purge(&sch->q); qdisc_reset_queue(sch);
sch->qstats.backlog = 0;
for (i=0;i<t->DPs;i++) { for (i=0;i<t->DPs;i++) {
q= t->tab[i]; q= t->tab[i];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment