diff options
author | Jarek Poplawski <jarkao2@gmail.com> | 2009-07-14 07:20:32 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-07-20 10:39:31 -0400 |
commit | b902e5735272b6a79fe2853180b2ad6658aa9678 (patch) | |
tree | 6fa76aa1db096e4b20ba27e59172c1deda07e3fb /net | |
parent | be916cdebe4dc720a23b1a9bb589f2c22afd6589 (diff) |
ipv4: fib_trie: Use tnode_get_child_rcu() and node_parent_rcu() in lookups
While looking for other fib_trie problems reported by Pawel Staszewski
I noticed there are a few uses of tnode_get_child() and node_parent()
in lookups instead of their rcu versions.
Signed-off-by: Jarek Poplawski <jarkao2@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv4/fib_trie.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c index 5741d1306cc5..d58b49115386 100644 --- a/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c | |||
@@ -1465,7 +1465,7 @@ static int fn_trie_lookup(struct fib_table *tb, const struct flowi *flp, | |||
1465 | cindex = tkey_extract_bits(mask_pfx(key, current_prefix_length), | 1465 | cindex = tkey_extract_bits(mask_pfx(key, current_prefix_length), |
1466 | pos, bits); | 1466 | pos, bits); |
1467 | 1467 | ||
1468 | n = tnode_get_child(pn, cindex); | 1468 | n = tnode_get_child_rcu(pn, cindex); |
1469 | 1469 | ||
1470 | if (n == NULL) { | 1470 | if (n == NULL) { |
1471 | #ifdef CONFIG_IP_FIB_TRIE_STATS | 1471 | #ifdef CONFIG_IP_FIB_TRIE_STATS |
@@ -1600,7 +1600,7 @@ backtrace: | |||
1600 | if (chopped_off <= pn->bits) { | 1600 | if (chopped_off <= pn->bits) { |
1601 | cindex &= ~(1 << (chopped_off-1)); | 1601 | cindex &= ~(1 << (chopped_off-1)); |
1602 | } else { | 1602 | } else { |
1603 | struct tnode *parent = node_parent((struct node *) pn); | 1603 | struct tnode *parent = node_parent_rcu((struct node *) pn); |
1604 | if (!parent) | 1604 | if (!parent) |
1605 | goto failed; | 1605 | goto failed; |
1606 | 1606 | ||
@@ -1813,7 +1813,7 @@ static struct leaf *trie_firstleaf(struct trie *t) | |||
1813 | static struct leaf *trie_nextleaf(struct leaf *l) | 1813 | static struct leaf *trie_nextleaf(struct leaf *l) |
1814 | { | 1814 | { |
1815 | struct node *c = (struct node *) l; | 1815 | struct node *c = (struct node *) l; |
1816 | struct tnode *p = node_parent(c); | 1816 | struct tnode *p = node_parent_rcu(c); |
1817 | 1817 | ||
1818 | if (!p) | 1818 | if (!p) |
1819 | return NULL; /* trie with just one leaf */ | 1819 | return NULL; /* trie with just one leaf */ |