Re: [RFC][PATCH] identify in_dev_get rcu read-side critical sections
From: Paul E. McKenney <hidden>
Date: 2005-09-30 01:15:28
On Fri, Sep 30, 2005 at 11:04:04AM +1000, Herbert Xu wrote:
On Thu, Sep 29, 2005 at 05:36:42PM -0700, Paul E. McKenney wrote:quoted
quoted
rcu_read_lock(); in_dev = dev->ip_ptr; if (in_dev) { in_dev = rcu_dereference(in_dev); atomic_inc(&in_dev->refcnt); } rcu_read_unlock(); return in_dev;How about: rcu_read_lock(); in_dev = dev->ip_ptr; if (rcu_dereference(in_dev)) { atomic_inc(&in_dev->refcnt); } rcu_read_unlock(); return in_dev;With this the barrier will taken even when in_dev is NULL. I agree this isn't such a big deal since it only impacts Alpha and then only when in_dev is NULL. But as we already do the branch anyway to increment the reference count, we might as well make things a little better for Alpha.
OK, how about this instead?
rcu_read_lock();
in_dev = dev->ip_ptr;
if (in_dev) {
atomic_inc(&rcu_dereference(in_dev)->refcnt);
}
rcu_read_unlock();
return in_dev;
Thanx, Paul