Commit 6fc8e84f authored by Thomas Graf's avatar Thomas Graf Committed by David S. Miller

[PKT_SCHED]: Cleanup fifo qdisc and remove unnecessary code

Removes the skb trimming code which is not needed since we never
touch the skb upon failure. Removes unnecessary includes,
initializers, and simplifies the code a bit.
Signed-off-by: default avatarThomas Graf <tgraf@suug.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent aaae3013
...@@ -11,39 +11,21 @@ ...@@ -11,39 +11,21 @@
#include <linux/config.h> #include <linux/config.h>
#include <linux/module.h> #include <linux/module.h>
#include <asm/uaccess.h>
#include <asm/system.h>
#include <linux/bitops.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/string.h>
#include <linux/mm.h>
#include <linux/socket.h>
#include <linux/sockios.h>
#include <linux/in.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/interrupt.h>
#include <linux/if_ether.h>
#include <linux/inet.h>
#include <linux/netdevice.h> #include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/notifier.h>
#include <net/ip.h>
#include <net/route.h>
#include <linux/skbuff.h> #include <linux/skbuff.h>
#include <net/sock.h>
#include <net/pkt_sched.h> #include <net/pkt_sched.h>
/* 1 band FIFO pseudo-"scheduler" */ /* 1 band FIFO pseudo-"scheduler" */
struct fifo_sched_data struct fifo_sched_data
{ {
unsigned limit; u32 limit;
}; };
static int static int bfifo_enqueue(struct sk_buff *skb, struct Qdisc* sch)
bfifo_enqueue(struct sk_buff *skb, struct Qdisc* sch)
{ {
struct fifo_sched_data *q = qdisc_priv(sch); struct fifo_sched_data *q = qdisc_priv(sch);
...@@ -53,8 +35,7 @@ bfifo_enqueue(struct sk_buff *skb, struct Qdisc* sch) ...@@ -53,8 +35,7 @@ bfifo_enqueue(struct sk_buff *skb, struct Qdisc* sch)
return qdisc_reshape_fail(skb, sch); return qdisc_reshape_fail(skb, sch);
} }
static int static int pfifo_enqueue(struct sk_buff *skb, struct Qdisc* sch)
pfifo_enqueue(struct sk_buff *skb, struct Qdisc* sch)
{ {
struct fifo_sched_data *q = qdisc_priv(sch); struct fifo_sched_data *q = qdisc_priv(sch);
...@@ -69,40 +50,37 @@ static int fifo_init(struct Qdisc *sch, struct rtattr *opt) ...@@ -69,40 +50,37 @@ static int fifo_init(struct Qdisc *sch, struct rtattr *opt)
struct fifo_sched_data *q = qdisc_priv(sch); struct fifo_sched_data *q = qdisc_priv(sch);
if (opt == NULL) { if (opt == NULL) {
unsigned int limit = sch->dev->tx_queue_len ? : 1; u32 limit = sch->dev->tx_queue_len ? : 1;
if (sch->ops == &bfifo_qdisc_ops) if (sch->ops == &bfifo_qdisc_ops)
q->limit = limit*sch->dev->mtu; limit *= sch->dev->mtu;
else
q->limit = limit; q->limit = limit;
} else { } else {
struct tc_fifo_qopt *ctl = RTA_DATA(opt); struct tc_fifo_qopt *ctl = RTA_DATA(opt);
if (opt->rta_len < RTA_LENGTH(sizeof(*ctl)))
if (RTA_PAYLOAD(opt) < sizeof(*ctl))
return -EINVAL; return -EINVAL;
q->limit = ctl->limit; q->limit = ctl->limit;
} }
return 0; return 0;
} }
static int fifo_dump(struct Qdisc *sch, struct sk_buff *skb) static int fifo_dump(struct Qdisc *sch, struct sk_buff *skb)
{ {
struct fifo_sched_data *q = qdisc_priv(sch); struct fifo_sched_data *q = qdisc_priv(sch);
unsigned char *b = skb->tail; struct tc_fifo_qopt opt = { .limit = q->limit };
struct tc_fifo_qopt opt;
opt.limit = q->limit;
RTA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt); RTA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt);
return skb->len; return skb->len;
rtattr_failure: rtattr_failure:
skb_trim(skb, b - skb->data);
return -1; return -1;
} }
struct Qdisc_ops pfifo_qdisc_ops = { struct Qdisc_ops pfifo_qdisc_ops = {
.next = NULL,
.cl_ops = NULL,
.id = "pfifo", .id = "pfifo",
.priv_size = sizeof(struct fifo_sched_data), .priv_size = sizeof(struct fifo_sched_data),
.enqueue = pfifo_enqueue, .enqueue = pfifo_enqueue,
...@@ -111,15 +89,12 @@ struct Qdisc_ops pfifo_qdisc_ops = { ...@@ -111,15 +89,12 @@ struct Qdisc_ops pfifo_qdisc_ops = {
.drop = qdisc_queue_drop, .drop = qdisc_queue_drop,
.init = fifo_init, .init = fifo_init,
.reset = qdisc_reset_queue, .reset = qdisc_reset_queue,
.destroy = NULL,
.change = fifo_init, .change = fifo_init,
.dump = fifo_dump, .dump = fifo_dump,
.owner = THIS_MODULE, .owner = THIS_MODULE,
}; };
struct Qdisc_ops bfifo_qdisc_ops = { struct Qdisc_ops bfifo_qdisc_ops = {
.next = NULL,
.cl_ops = NULL,
.id = "bfifo", .id = "bfifo",
.priv_size = sizeof(struct fifo_sched_data), .priv_size = sizeof(struct fifo_sched_data),
.enqueue = bfifo_enqueue, .enqueue = bfifo_enqueue,
...@@ -128,7 +103,6 @@ struct Qdisc_ops bfifo_qdisc_ops = { ...@@ -128,7 +103,6 @@ struct Qdisc_ops bfifo_qdisc_ops = {
.drop = qdisc_queue_drop, .drop = qdisc_queue_drop,
.init = fifo_init, .init = fifo_init,
.reset = qdisc_reset_queue, .reset = qdisc_reset_queue,
.destroy = NULL,
.change = fifo_init, .change = fifo_init,
.dump = fifo_dump, .dump = fifo_dump,
.owner = THIS_MODULE, .owner = THIS_MODULE,
......
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