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
net: add a noref bit on skb dst
[safe/jmp/linux-2.6]
/
net
/
sched
/
act_gact.c
diff --git
a/net/sched/act_gact.c
b/net/sched/act_gact.c
index
df214d4
..
e7f796a
100644
(file)
--- a/
net/sched/act_gact.c
+++ b/
net/sched/act_gact.c
@@
-53,6
+53,11
@@
typedef int (*g_rand)(struct tcf_gact *gact);
static g_rand gact_rand[MAX_RAND]= { NULL, gact_net_rand, gact_determ };
#endif /* CONFIG_GACT_PROB */
static g_rand gact_rand[MAX_RAND]= { NULL, gact_net_rand, gact_determ };
#endif /* CONFIG_GACT_PROB */
+static const struct nla_policy gact_policy[TCA_GACT_MAX + 1] = {
+ [TCA_GACT_PARMS] = { .len = sizeof(struct tc_gact) },
+ [TCA_GACT_PROB] = { .len = sizeof(struct tc_gact_p) },
+};
+
static int tcf_gact_init(struct nlattr *nla, struct nlattr *est,
struct tc_action *a, int ovr, int bind)
{
static int tcf_gact_init(struct nlattr *nla, struct nlattr *est,
struct tc_action *a, int ovr, int bind)
{
@@
-66,20
+71,16
@@
static int tcf_gact_init(struct nlattr *nla, struct nlattr *est,
if (nla == NULL)
return -EINVAL;
if (nla == NULL)
return -EINVAL;
- err = nla_parse_nested(tb, TCA_GACT_MAX, nla,
NULL
);
+ err = nla_parse_nested(tb, TCA_GACT_MAX, nla,
gact_policy
);
if (err < 0)
return err;
if (err < 0)
return err;
- if (tb[TCA_GACT_PARMS] == NULL ||
- nla_len(tb[TCA_GACT_PARMS]) < sizeof(*parm))
+ if (tb[TCA_GACT_PARMS] == NULL)
return -EINVAL;
parm = nla_data(tb[TCA_GACT_PARMS]);
return -EINVAL;
parm = nla_data(tb[TCA_GACT_PARMS]);
+#ifndef CONFIG_GACT_PROB
if (tb[TCA_GACT_PROB] != NULL)
if (tb[TCA_GACT_PROB] != NULL)
-#ifdef CONFIG_GACT_PROB
- if (nla_len(tb[TCA_GACT_PROB]) < sizeof(struct tc_gact_p))
- return -EINVAL;
-#else
return -EOPNOTSUPP;
#endif
return -EOPNOTSUPP;
#endif
@@
-87,8
+88,8
@@
static int tcf_gact_init(struct nlattr *nla, struct nlattr *est,
if (!pc) {
pc = tcf_hash_create(parm->index, est, a, sizeof(*gact),
bind, &gact_idx_gen, &gact_hash_info);
if (!pc) {
pc = tcf_hash_create(parm->index, est, a, sizeof(*gact),
bind, &gact_idx_gen, &gact_hash_info);
- if (
unlikely(!
pc))
-
return -ENOMEM
;
+ if (
IS_ERR(
pc))
+
return PTR_ERR(pc)
;
ret = ACT_P_CREATED;
} else {
if (!ovr) {
ret = ACT_P_CREATED;
} else {
if (!ovr) {
@@
-138,7
+139,7
@@
static int tcf_gact(struct sk_buff *skb, struct tc_action *a, struct tcf_result
#else
action = gact->tcf_action;
#endif
#else
action = gact->tcf_action;
#endif
- gact->tcf_bstats.bytes +=
skb->len
;
+ gact->tcf_bstats.bytes +=
qdisc_pkt_len(skb)
;
gact->tcf_bstats.packets++;
if (action == TC_ACT_SHOT)
gact->tcf_qstats.drops++;
gact->tcf_bstats.packets++;
if (action == TC_ACT_SHOT)
gact->tcf_qstats.drops++;