Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 320510
b: refs/heads/master
c: 61648d9
h: refs/heads/master
v: v3
  • Loading branch information
Lin Ming authored and David S. Miller committed Jul 30, 2012
1 parent 5bc8412 commit 853aa7c
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 27 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4ea4bf7ebcbacee2f4736d261efb0693e87a34c9
refs/heads/master: 61648d91fc278fd1d500da8061d17e6920cd3500
51 changes: 25 additions & 26 deletions trunk/net/ipv4/fib_trie.c
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,6 @@ struct trie {
#endif
};

static void put_child(struct trie *t, struct tnode *tn, int i, struct rt_trie_node *n);
static void tnode_put_child_reorg(struct tnode *tn, int i, struct rt_trie_node *n,
int wasfull);
static struct rt_trie_node *resize(struct trie *t, struct tnode *tn);
Expand Down Expand Up @@ -490,7 +489,7 @@ static inline int tnode_full(const struct tnode *tn, const struct rt_trie_node *
return ((struct tnode *) n)->pos == tn->pos + tn->bits;
}

static inline void put_child(struct trie *t, struct tnode *tn, int i,
static inline void put_child(struct tnode *tn, int i,
struct rt_trie_node *n)
{
tnode_put_child_reorg(tn, i, n, -1);
Expand Down Expand Up @@ -754,8 +753,8 @@ static struct tnode *inflate(struct trie *t, struct tnode *tn)
goto nomem;
}

put_child(t, tn, 2*i, (struct rt_trie_node *) left);
put_child(t, tn, 2*i+1, (struct rt_trie_node *) right);
put_child(tn, 2*i, (struct rt_trie_node *) left);
put_child(tn, 2*i+1, (struct rt_trie_node *) right);
}
}

Expand All @@ -776,18 +775,18 @@ static struct tnode *inflate(struct trie *t, struct tnode *tn)
if (tkey_extract_bits(node->key,
oldtnode->pos + oldtnode->bits,
1) == 0)
put_child(t, tn, 2*i, node);
put_child(tn, 2*i, node);
else
put_child(t, tn, 2*i+1, node);
put_child(tn, 2*i+1, node);
continue;
}

/* An internal node with two children */
inode = (struct tnode *) node;

if (inode->bits == 1) {
put_child(t, tn, 2*i, rtnl_dereference(inode->child[0]));
put_child(t, tn, 2*i+1, rtnl_dereference(inode->child[1]));
put_child(tn, 2*i, rtnl_dereference(inode->child[0]));
put_child(tn, 2*i+1, rtnl_dereference(inode->child[1]));

tnode_free_safe(inode);
continue;
Expand Down Expand Up @@ -817,22 +816,22 @@ static struct tnode *inflate(struct trie *t, struct tnode *tn)
*/

left = (struct tnode *) tnode_get_child(tn, 2*i);
put_child(t, tn, 2*i, NULL);
put_child(tn, 2*i, NULL);

BUG_ON(!left);

right = (struct tnode *) tnode_get_child(tn, 2*i+1);
put_child(t, tn, 2*i+1, NULL);
put_child(tn, 2*i+1, NULL);

BUG_ON(!right);

size = tnode_child_length(left);
for (j = 0; j < size; j++) {
put_child(t, left, j, rtnl_dereference(inode->child[j]));
put_child(t, right, j, rtnl_dereference(inode->child[j + size]));
put_child(left, j, rtnl_dereference(inode->child[j]));
put_child(right, j, rtnl_dereference(inode->child[j + size]));
}
put_child(t, tn, 2*i, resize(t, left));
put_child(t, tn, 2*i+1, resize(t, right));
put_child(tn, 2*i, resize(t, left));
put_child(tn, 2*i+1, resize(t, right));

tnode_free_safe(inode);
}
Expand Down Expand Up @@ -877,7 +876,7 @@ static struct tnode *halve(struct trie *t, struct tnode *tn)
if (!newn)
goto nomem;

put_child(t, tn, i/2, (struct rt_trie_node *)newn);
put_child(tn, i/2, (struct rt_trie_node *)newn);
}

}
Expand All @@ -892,21 +891,21 @@ static struct tnode *halve(struct trie *t, struct tnode *tn)
if (left == NULL) {
if (right == NULL) /* Both are empty */
continue;
put_child(t, tn, i/2, right);
put_child(tn, i/2, right);
continue;
}

if (right == NULL) {
put_child(t, tn, i/2, left);
put_child(tn, i/2, left);
continue;
}

/* Two nonempty children */
newBinNode = (struct tnode *) tnode_get_child(tn, i/2);
put_child(t, tn, i/2, NULL);
put_child(t, newBinNode, 0, left);
put_child(t, newBinNode, 1, right);
put_child(t, tn, i/2, resize(t, newBinNode));
put_child(tn, i/2, NULL);
put_child(newBinNode, 0, left);
put_child(newBinNode, 1, right);
put_child(tn, i/2, resize(t, newBinNode));
}
tnode_free_safe(oldtnode);
return tn;
Expand Down Expand Up @@ -1125,7 +1124,7 @@ static struct list_head *fib_insert_node(struct trie *t, u32 key, int plen)
node_set_parent((struct rt_trie_node *)l, tp);

cindex = tkey_extract_bits(key, tp->pos, tp->bits);
put_child(t, tp, cindex, (struct rt_trie_node *)l);
put_child(tp, cindex, (struct rt_trie_node *)l);
} else {
/* Case 3: n is a LEAF or a TNODE and the key doesn't match. */
/*
Expand Down Expand Up @@ -1155,12 +1154,12 @@ static struct list_head *fib_insert_node(struct trie *t, u32 key, int plen)
node_set_parent((struct rt_trie_node *)tn, tp);

missbit = tkey_extract_bits(key, newpos, 1);
put_child(t, tn, missbit, (struct rt_trie_node *)l);
put_child(t, tn, 1-missbit, n);
put_child(tn, missbit, (struct rt_trie_node *)l);
put_child(tn, 1-missbit, n);

if (tp) {
cindex = tkey_extract_bits(key, tp->pos, tp->bits);
put_child(t, tp, cindex, (struct rt_trie_node *)tn);
put_child(tp, cindex, (struct rt_trie_node *)tn);
} else {
rcu_assign_pointer(t->trie, (struct rt_trie_node *)tn);
tp = tn;
Expand Down Expand Up @@ -1619,7 +1618,7 @@ static void trie_leaf_remove(struct trie *t, struct leaf *l)

if (tp) {
t_key cindex = tkey_extract_bits(l->key, tp->pos, tp->bits);
put_child(t, tp, cindex, NULL);
put_child(tp, cindex, NULL);
trie_rebalance(t, tp);
} else
RCU_INIT_POINTER(t->trie, NULL);
Expand Down

0 comments on commit 853aa7c

Please sign in to comment.