Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b902e573 authored by Jarek Poplawski's avatar Jarek Poplawski Committed by David S. Miller
Browse files

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: default avatarJarek Poplawski <jarkao2@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent be916cde
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1465,7 +1465,7 @@ static int fn_trie_lookup(struct fib_table *tb, const struct flowi *flp,
			cindex = tkey_extract_bits(mask_pfx(key, current_prefix_length),
						   pos, bits);

		n = tnode_get_child(pn, cindex);
		n = tnode_get_child_rcu(pn, cindex);

		if (n == NULL) {
#ifdef CONFIG_IP_FIB_TRIE_STATS
@@ -1600,7 +1600,7 @@ static int fn_trie_lookup(struct fib_table *tb, const struct flowi *flp,
		if (chopped_off <= pn->bits) {
			cindex &= ~(1 << (chopped_off-1));
		} else {
			struct tnode *parent = node_parent((struct node *) pn);
			struct tnode *parent = node_parent_rcu((struct node *) pn);
			if (!parent)
				goto failed;

@@ -1813,7 +1813,7 @@ static struct leaf *trie_firstleaf(struct trie *t)
static struct leaf *trie_nextleaf(struct leaf *l)
{
	struct node *c = (struct node *) l;
	struct tnode *p = node_parent(c);
	struct tnode *p = node_parent_rcu(c);

	if (!p)
		return NULL;	/* trie with just one leaf */