Re: [PATCH RFC 0/5] rcu doc updates for whatisRCU and checklist

From: Theodore Y. Ts'o
Date: Sat Oct 06 2018 - 01:35:11 EST


On Fri, Oct 05, 2018 at 08:45:40PM -0700, Paul E. McKenney wrote:
>
> Shouldn't the synchronize_rcu() precede the loop doing the kfree()
> calls? Or am I missing something subtle?

No, that was a cut and paste error on my part. I was removing the
rcu_read_unlock() before the kfree loop, and accidentally removed the
synchronize_rcu(). Then when I put it back, I put it back in the
right place.

The longer version:

I originally used rcu_read_lock() and rcu_read_unlock() around setting
up to_free[] --- since whatisRCU.txt didn't talk about
rcu_derefence_proctected(), just rcu_dereference() in Section 2: "What
is RCU's Core API?"

Then when I looked at the example in Section 3, I was surprised when I
didn't see the rcu_read_[un]lock() on the updater side, and spent some
time trying to figure out how to use rcu_dereference_protected().

Then when I did the transumation from
rcu_read_lock/rcu_dereference_protected/rcu_read_unlock to
rcu_dereference_protected, I bobbled the location of
synchronize_rcu().

- Ted

P.S. Pedagogically, it might make sense to show an example that only
uses the RCU core API --- I assume using rcu_read_[un]lock() and
rcu_dereference() does work; it's just non-optimal, right? --- and
then introduce the use of rcu_dereference_protected() afterwards.