projects
/
openwrt
/
svn-archive
/
archive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
kernel: bump to 3.14.35, 3.18.9, 3.19.1 and 4.0-rc4
[openwrt/svn-archive/archive.git]
/
target
/
linux
/
generic
/
patches-3.18
/
080-20-fib_trie-Fix-RCU-bug-and-merge-similar-bits-of-infla.patch
diff --git
a/target/linux/generic/patches-3.18/080-20-fib_trie-Fix-RCU-bug-and-merge-similar-bits-of-infla.patch
b/target/linux/generic/patches-3.18/080-20-fib_trie-Fix-RCU-bug-and-merge-similar-bits-of-infla.patch
index be837526a411a38434a1a1bb5caa2ecf006ef242..7e26127084f7178dc92eebf1bfea0f39f8bc7a6b 100644
(file)
--- a/
target/linux/generic/patches-3.18/080-20-fib_trie-Fix-RCU-bug-and-merge-similar-bits-of-infla.patch
+++ b/
target/linux/generic/patches-3.18/080-20-fib_trie-Fix-RCU-bug-and-merge-similar-bits-of-infla.patch
@@
-29,7
+29,7
@@
Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
-@@ -396,8 +396,30 @@ static void put_child(struct tnode *tn,
+@@ -396,8 +396,30 @@ static void put_child(struct tnode *tn,
rcu_assign_pointer(tn->child[i], n);
}
rcu_assign_pointer(tn->child[i], n);
}
@@
-150,7
+150,9
@@
Signed-off-by: David S. Miller <davem@davemloft.net>
- tp = node_parent(oldtnode);
- NODE_INIT_PARENT(tn, tp);
- put_child_root(tp, t, tn->key, tn);
- tp = node_parent(oldtnode);
- NODE_INIT_PARENT(tn, tp);
- put_child_root(tp, t, tn->key, tn);
--
++ /* setup the parent pointers into and out of this node */
++ replace(t, oldtnode, tn);
+
- /* prepare oldtnode to be freed */
- tnode_free_init(oldtnode);
-
- /* prepare oldtnode to be freed */
- tnode_free_init(oldtnode);
-
@@
-170,9
+172,7
@@
Signed-off-by: David S. Miller <davem@davemloft.net>
- /* fetch new nodes */
- node1 = tnode_get_child(tn, 2 * i + 1);
- node0 = tnode_get_child(tn, 2 * i);
- /* fetch new nodes */
- node1 = tnode_get_child(tn, 2 * i + 1);
- node0 = tnode_get_child(tn, 2 * i);
-+ /* setup the parent pointers into and out of this node */
-+ replace(t, oldtnode, tn);
-
+-
- /* bits == 1 then node0 and node1 represent inode's children */
- if (inode->bits == 1) {
- node_set_parent(node1, tn);
- /* bits == 1 then node0 and node1 represent inode's children */
- if (inode->bits == 1) {
- node_set_parent(node1, tn);
@@
-207,7
+207,7
@@
Signed-off-by: David S. Miller <davem@davemloft.net>
unsigned long i;
pr_debug("In halve\n");
unsigned long i;
pr_debug("In halve\n");
-@@ -577,14 +588,18 @@ static int halve(struct trie *t, struct
+@@ -577,14 +588,18 @@ static int halve(struct trie *t, struct
if (!tn)
return -ENOMEM;
if (!tn)
return -ENOMEM;
@@
-228,7
+228,7
@@
Signed-off-by: David S. Miller <davem@davemloft.net>
/* At least one of the children is empty */
if (!node1 || !node0) {
/* At least one of the children is empty */
if (!node1 || !node0) {
-@@ -609,34 +624,8 @@ static int halve(struct trie *t, struct
+@@ -609,34 +624,8 @@ static int halve(struct trie *t, struct
put_child(tn, i / 2, inode);
}
put_child(tn, i / 2, inode);
}