On Thu, Apr 27, 2017 at 4:54 PM, Eric Dumazet <eric.duma...@gmail.com> wrote: > On Thu, 2017-04-27 at 16:46 -0700, Cong Wang wrote: >> On Thu, Apr 27, 2017 at 5:46 AM, Eric Dumazet <eric.duma...@gmail.com> wrote: >> > On Wed, 2017-04-26 at 13:55 -0700, Cong Wang wrote: >> >> After commit 1215e51edad1 ("ipv4: fix a deadlock in ip_ra_control") >> >> we always take RTNL lock for ip_ra_control() which is the only place >> >> we update the list ip_ra_chain, so the ip_ra_lock is no longer needed, >> >> we just need to disable BH there. >> >> >> >> Signed-off-by: Cong Wang <xiyou.wangc...@gmail.com> >> >> --- >> > >> > Looks great, but reading again this code, I believe we do not need to >> > disable BH at all ? >> > >> >> Hmm, if we don't disable BH here, a reader in BH could jump in and >> break this critical section? Or that is fine for RCU? > > It should be fine for RCU. > > The spinlock (or mutex if this is RTNL) is protecting writers among > themselves. Here it should run in process context, with no specific > rules to disable preemption, hard or soft irqs. > > The reader(s) do not care of how writer(s) enforce their mutual > protection, and if writer(s) disable hard or soft irqs.
Fair enough! This refreshes my understanding of RCU. I will send V2. The ASSERT_RTNL() is unnecessary too, as we already have one in rcu_dereference_protected(). Thanks!