On Wed, Oct 20, 2010 at 3:05 PM, Dave Chinner <david@fromorbit.com> wrote:
Look out for livelocks, though. And yes, they can happen.
So rather than a loop, one option is to do basically
rcu_read_lock();
seq = read_seqbegin();
.. do lookup ..
need_lock = read_seqretry(seq);
rcu_read_unlock();
if (need_lock) {
get_real_lock();
.. do lookup ..
drop_real_lock();
}
which just falls back to a locked access if the rcu model doesn't work.
Linus
--