Code Review
/
kvmfornfv.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
These changes are a raw update to a vanilla kernel 4.1.10, with the
[kvmfornfv.git]
/
kernel
/
net
/
sched
/
cls_fw.c
diff --git
a/kernel/net/sched/cls_fw.c
b/kernel/net/sched/cls_fw.c
index
715e01e
..
f23a3b6
100644
(file)
--- a/
kernel/net/sched/cls_fw.c
+++ b/
kernel/net/sched/cls_fw.c
@@
-33,7
+33,6
@@
struct fw_head {
u32 mask;
struct fw_head {
u32 mask;
- bool mask_set;
struct fw_filter __rcu *ht[HTSIZE];
struct rcu_head rcu;
};
struct fw_filter __rcu *ht[HTSIZE];
struct rcu_head rcu;
};
@@
-84,7
+83,7
@@
static int fw_classify(struct sk_buff *skb, const struct tcf_proto *tp,
}
}
} else {
}
}
} else {
- /*
old method
*/
+ /*
Old method: classify the packet using its skb mark.
*/
if (id && (TC_H_MAJ(id) == 0 ||
!(TC_H_MAJ(id ^ tp->q->handle)))) {
res->classid = id;
if (id && (TC_H_MAJ(id) == 0 ||
!(TC_H_MAJ(id ^ tp->q->handle)))) {
res->classid = id;
@@
-114,14
+113,9
@@
static unsigned long fw_get(struct tcf_proto *tp, u32 handle)
static int fw_init(struct tcf_proto *tp)
{
static int fw_init(struct tcf_proto *tp)
{
- struct fw_head *head;
-
- head = kzalloc(sizeof(struct fw_head), GFP_KERNEL);
- if (head == NULL)
- return -ENOBUFS;
-
- head->mask_set = false;
- rcu_assign_pointer(tp->root, head);
+ /* We don't allocate fw_head here, because in the old method
+ * we don't need it at all.
+ */
return 0;
}
return 0;
}
@@
-252,7
+246,7
@@
static int fw_change(struct net *net, struct sk_buff *in_skb,
int err;
if (!opt)
int err;
if (!opt)
- return handle ? -EINVAL : 0;
+ return handle ? -EINVAL : 0;
/* Succeed if it is old method. */
err = nla_parse_nested(tb, TCA_FW_MAX, opt, fw_policy);
if (err < 0)
err = nla_parse_nested(tb, TCA_FW_MAX, opt, fw_policy);
if (err < 0)
@@
-302,11
+296,17
@@
static int fw_change(struct net *net, struct sk_buff *in_skb,
if (!handle)
return -EINVAL;
if (!handle)
return -EINVAL;
- if (!head
->mask_set
) {
-
head->
mask = 0xFFFFFFFF;
+ if (!head) {
+
u32
mask = 0xFFFFFFFF;
if (tb[TCA_FW_MASK])
if (tb[TCA_FW_MASK])
- head->mask = nla_get_u32(tb[TCA_FW_MASK]);
- head->mask_set = true;
+ mask = nla_get_u32(tb[TCA_FW_MASK]);
+
+ head = kzalloc(sizeof(*head), GFP_KERNEL);
+ if (!head)
+ return -ENOBUFS;
+ head->mask = mask;
+
+ rcu_assign_pointer(tp->root, head);
}
f = kzalloc(sizeof(struct fw_filter), GFP_KERNEL);
}
f = kzalloc(sizeof(struct fw_filter), GFP_KERNEL);