Re: [patch 1/3] radix tree: RCU lockless read-side

From: Nick Piggin
Date: Sun Mar 12 2006 - 22:08:28 EST


Balbir Singh wrote:
On 3/11/06, Nick Piggin <nickpiggin@xxxxxxxxxxxx> wrote:

Balbir Singh wrote:

<snip>

if (slot->slots[i]) {
- results[nr_found++] = slot->slots[i];
+ results[nr_found++] = &slot->slots[i];
if (nr_found == max_items)
goto out;
}


A quick clarification - Shouldn't accesses to slot->slots[i] above be
protected using rcu_derefence()?


I think we're safe here -- this is the _address_ of the pointer.
However, when dereferencing this address in _gang_lookup,
I think we do need rcu_dereference indeed.



Yes, I saw the address operator, but we still derefence "slots" to get
the address.


But we should have already rcu_dereference()ed "slot", right
(in the loop above this one)? That means we are now able to
dereference it, and the data at the other end will be valid.

--
SUSE Labs, Novell Inc.
Send instant messages to your online friends http://au.messenger.yahoo.com -
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/