git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
MIPS: Lasat: Convert to proc_fops / seq_file
[safe/jmp/linux-2.6]
/
net
/
sched
/
sch_dsmark.c
diff --git
a/net/sched/sch_dsmark.c
b/net/sched/sch_dsmark.c
index
0df911f
..
d303daa
100644
(file)
--- a/
net/sched/sch_dsmark.c
+++ b/
net/sched/sch_dsmark.c
@@
-60,14
+60,16
@@
static int dsmark_graft(struct Qdisc *sch, unsigned long arg,
sch, p, new, old);
if (new == NULL) {
sch, p, new, old);
if (new == NULL) {
- new = qdisc_create_dflt(sch->dev, &pfifo_qdisc_ops,
+ new = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
+ &pfifo_qdisc_ops,
sch->handle);
if (new == NULL)
new = &noop_qdisc;
}
sch_tree_lock(sch);
sch->handle);
if (new == NULL)
new = &noop_qdisc;
}
sch_tree_lock(sch);
- *old = xchg(&p->q, new);
+ *old = p->q;
+ p->q = new;
qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
qdisc_reset(*old);
sch_tree_unlock(sch);
qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
qdisc_reset(*old);
sch_tree_unlock(sch);
@@
-201,7
+203,7
@@
static int dsmark_enqueue(struct sk_buff *skb, struct Qdisc *sch)
if (p->set_tc_index) {
switch (skb->protocol) {
if (p->set_tc_index) {
switch (skb->protocol) {
- case
__constant_
htons(ETH_P_IP):
+ case htons(ETH_P_IP):
if (skb_cow_head(skb, sizeof(struct iphdr)))
goto drop;
if (skb_cow_head(skb, sizeof(struct iphdr)))
goto drop;
@@
-209,7
+211,7
@@
static int dsmark_enqueue(struct sk_buff *skb, struct Qdisc *sch)
& ~INET_ECN_MASK;
break;
& ~INET_ECN_MASK;
break;
- case
__constant_
htons(ETH_P_IPV6):
+ case htons(ETH_P_IPV6):
if (skb_cow_head(skb, sizeof(struct ipv6hdr)))
goto drop;
if (skb_cow_head(skb, sizeof(struct ipv6hdr)))
goto drop;
@@
-235,7
+237,7
@@
static int dsmark_enqueue(struct sk_buff *skb, struct Qdisc *sch)
case TC_ACT_QUEUED:
case TC_ACT_STOLEN:
kfree_skb(skb);
case TC_ACT_QUEUED:
case TC_ACT_STOLEN:
kfree_skb(skb);
- return NET_XMIT_SUCCESS;
+ return NET_XMIT_SUCCESS
| __NET_XMIT_STOLEN
;
case TC_ACT_SHOT:
goto drop;
case TC_ACT_SHOT:
goto drop;
@@
-251,13
+253,14
@@
static int dsmark_enqueue(struct sk_buff *skb, struct Qdisc *sch)
}
}
}
}
- err =
p->q->
enqueue(skb, p->q);
+ err =
qdisc_
enqueue(skb, p->q);
if (err != NET_XMIT_SUCCESS) {
if (err != NET_XMIT_SUCCESS) {
- sch->qstats.drops++;
+ if (net_xmit_drop_count(err))
+ sch->qstats.drops++;
return err;
}
return err;
}
- sch->bstats.bytes +=
skb->len
;
+ sch->bstats.bytes +=
qdisc_pkt_len(skb)
;
sch->bstats.packets++;
sch->q.qlen++;
sch->bstats.packets++;
sch->q.qlen++;
@@
-266,7
+269,7
@@
static int dsmark_enqueue(struct sk_buff *skb, struct Qdisc *sch)
drop:
kfree_skb(skb);
sch->qstats.drops++;
drop:
kfree_skb(skb);
sch->qstats.drops++;
- return NET_XMIT_BYPASS;
+ return NET_XMIT_
SUCCESS | __NET_XMIT_
BYPASS;
}
static struct sk_buff *dsmark_dequeue(struct Qdisc *sch)
}
static struct sk_buff *dsmark_dequeue(struct Qdisc *sch)
@@
-287,11
+290,11
@@
static struct sk_buff *dsmark_dequeue(struct Qdisc *sch)
pr_debug("index %d->%d\n", skb->tc_index, index);
switch (skb->protocol) {
pr_debug("index %d->%d\n", skb->tc_index, index);
switch (skb->protocol) {
- case
__constant_
htons(ETH_P_IP):
+ case htons(ETH_P_IP):
ipv4_change_dsfield(ip_hdr(skb), p->mask[index],
p->value[index]);
break;
ipv4_change_dsfield(ip_hdr(skb), p->mask[index],
p->value[index]);
break;
- case
__constant_
htons(ETH_P_IPV6):
+ case htons(ETH_P_IPV6):
ipv6_change_dsfield(ipv6_hdr(skb), p->mask[index],
p->value[index]);
break;
ipv6_change_dsfield(ipv6_hdr(skb), p->mask[index],
p->value[index]);
break;
@@
-311,23
+314,13
@@
static struct sk_buff *dsmark_dequeue(struct Qdisc *sch)
return skb;
}
return skb;
}
-static
int dsmark_requeue(struct sk_buff *skb,
struct Qdisc *sch)
+static
struct sk_buff *dsmark_peek(
struct Qdisc *sch)
{
struct dsmark_qdisc_data *p = qdisc_priv(sch);
{
struct dsmark_qdisc_data *p = qdisc_priv(sch);
- int err;
-
- pr_debug("dsmark_requeue(skb %p,sch %p,[qdisc %p])\n", skb, sch, p);
-
- err = p->q->ops->requeue(skb, p->q);
- if (err != NET_XMIT_SUCCESS) {
- sch->qstats.drops++;
- return err;
- }
- sch->q.qlen++;
- sch->qstats.requeues++;
+ pr_debug("dsmark_peek(sch %p,[qdisc %p])\n", sch, p);
- return
NET_XMIT_SUCCESS
;
+ return
p->q->ops->peek(p->q)
;
}
static unsigned int dsmark_drop(struct Qdisc *sch)
}
static unsigned int dsmark_drop(struct Qdisc *sch)
@@
-390,7
+383,8
@@
static int dsmark_init(struct Qdisc *sch, struct nlattr *opt)
p->default_index = default_index;
p->set_tc_index = nla_get_flag(tb[TCA_DSMARK_SET_TC_INDEX]);
p->default_index = default_index;
p->set_tc_index = nla_get_flag(tb[TCA_DSMARK_SET_TC_INDEX]);
- p->q = qdisc_create_dflt(sch->dev, &pfifo_qdisc_ops, sch->handle);
+ p->q = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
+ &pfifo_qdisc_ops, sch->handle);
if (p->q == NULL)
p->q = &noop_qdisc;
if (p->q == NULL)
p->q = &noop_qdisc;
@@
-416,7
+410,7
@@
static void dsmark_destroy(struct Qdisc *sch)
pr_debug("dsmark_destroy(sch %p,[qdisc %p])\n", sch, p);
pr_debug("dsmark_destroy(sch %p,[qdisc %p])\n", sch, p);
- tcf_destroy_chain(p->filter_list);
+ tcf_destroy_chain(
&
p->filter_list);
qdisc_destroy(p->q);
kfree(p->mask);
}
qdisc_destroy(p->q);
kfree(p->mask);
}
@@
-444,7
+438,8
@@
static int dsmark_dump_class(struct Qdisc *sch, unsigned long cl,
return nla_nest_end(skb, opts);
nla_put_failure:
return nla_nest_end(skb, opts);
nla_put_failure:
- return nla_nest_cancel(skb, opts);
+ nla_nest_cancel(skb, opts);
+ return -EMSGSIZE;
}
static int dsmark_dump(struct Qdisc *sch, struct sk_buff *skb)
}
static int dsmark_dump(struct Qdisc *sch, struct sk_buff *skb)
@@
-466,7
+461,8
@@
static int dsmark_dump(struct Qdisc *sch, struct sk_buff *skb)
return nla_nest_end(skb, opts);
nla_put_failure:
return nla_nest_end(skb, opts);
nla_put_failure:
- return nla_nest_cancel(skb, opts);
+ nla_nest_cancel(skb, opts);
+ return -EMSGSIZE;
}
static const struct Qdisc_class_ops dsmark_class_ops = {
}
static const struct Qdisc_class_ops dsmark_class_ops = {
@@
-490,7
+486,7
@@
static struct Qdisc_ops dsmark_qdisc_ops __read_mostly = {
.priv_size = sizeof(struct dsmark_qdisc_data),
.enqueue = dsmark_enqueue,
.dequeue = dsmark_dequeue,
.priv_size = sizeof(struct dsmark_qdisc_data),
.enqueue = dsmark_enqueue,
.dequeue = dsmark_dequeue,
- .
requeue = dsmark_requeue
,
+ .
peek = dsmark_peek
,
.drop = dsmark_drop,
.init = dsmark_init,
.reset = dsmark_reset,
.drop = dsmark_drop,
.init = dsmark_init,
.reset = dsmark_reset,