diff options
author | James Morris <jmorris@namei.org> | 2009-06-09 09:27:53 +1000 |
---|---|---|
committer | James Morris <jmorris@namei.org> | 2009-06-09 09:27:53 +1000 |
commit | 0b4ec6e4e01d98e55ae325a41304cccd87fa4c0f (patch) | |
tree | 1e075fdf4aaf0c5c003564b3f3414bb4a92ef2ed /net/ipv4/fib_trie.c | |
parent | 04288f42033607099cebf5ca15ce8dcec3a9688b (diff) | |
parent | 3af968e066d593bc4dacc021715f3e95ddf0996f (diff) |
Merge branch 'master' into next
Diffstat (limited to 'net/ipv4/fib_trie.c')
-rw-r--r-- | net/ipv4/fib_trie.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c index ec0ae490f0b..33c7c85dfe4 100644 --- a/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c @@ -986,9 +986,12 @@ fib_find_node(struct trie *t, u32 key) static struct node *trie_rebalance(struct trie *t, struct tnode *tn) { int wasfull; - t_key cindex, key = tn->key; + t_key cindex, key; struct tnode *tp; + preempt_disable(); + key = tn->key; + while (tn != NULL && (tp = node_parent((struct node *)tn)) != NULL) { cindex = tkey_extract_bits(key, tp->pos, tp->bits); wasfull = tnode_full(tp, tnode_get_child(tp, cindex)); @@ -1007,6 +1010,7 @@ static struct node *trie_rebalance(struct trie *t, struct tnode *tn) if (IS_TNODE(tn)) tn = (struct tnode *)resize(t, (struct tnode *)tn); + preempt_enable(); return (struct node *)tn; } |