Messages in this thread | | | From | Nick Piggin <> | Subject | Re: [PATCH]rcu,inet,fib_trie,route,radix-tree,DECnet,mac80211: fix meaningless rcu_dereference(local_var) | Date | Mon, 23 Jun 2008 12:36:50 +1000 |
| |
On Saturday 21 June 2008 19:54, Lai Jiangshan wrote:
> diff --git a/lib/radix-tree.c b/lib/radix-tree.c > index 169a2f8..bfae4e2 100644 > --- a/lib/radix-tree.c > +++ b/lib/radix-tree.c > @@ -703,9 +703,9 @@ __lookup(struct radix_tree_node *slot, void **results, > unsigned long index, for (i = index & RADIX_TREE_MAP_MASK; i < > RADIX_TREE_MAP_SIZE; i++) { struct radix_tree_node *node; > index++; > - node = slot->slots[i]; > + node = rcu_dereference(slot->slots[i]); > if (node) { > - results[nr_found++] = rcu_dereference(node); > + results[nr_found++] = node; > if (nr_found == max_items) > goto out; > } > @@ -815,7 +815,7 @@ __lookup_tag(struct radix_tree_node *slot, void > **results, unsigned long index, index++; > if (!tag_get(slot, tag, j)) > continue; > - node = slot->slots[j]; > + node = rcu_dereference(slot->slots[j]); > /* > * Even though the tag was found set, we need to > * recheck that we have a non-NULL node, because > @@ -827,7 +827,6 @@ __lookup_tag(struct radix_tree_node *slot, void > **results, unsigned long index, * rely on its value remaining the same). > */ > if (node) { > - node = rcu_dereference(node); > results[nr_found++] = node; > if (nr_found == max_items) > goto out;
This was done like this IIRC to avoid the barrier when possible.
| |