Messages in this thread | | | Date | Thu, 29 Sep 2005 17:36:42 -0700 | From | "Paul E. McKenney" <> | Subject | Re: [RFC][PATCH] identify in_dev_get rcu read-side critical sections |
| |
On Fri, Sep 30, 2005 at 10:27:19AM +1000, Herbert Xu wrote: > On Thu, Sep 29, 2005 at 05:23:46PM -0700, Paul E. McKenney wrote: > > > > Is there any case where __in_dev_get() might be called without > > needing to be wrapped with rcu_dereference()? If so, then I > > agree (FWIW, given my meagre knowledge of Linux networking). > > Yes. All paths that call __in_dev_get() under the rtnl do not > need rcu_dereference (or any RCU at all) since the rtnl prevents > any ip_ptr modification from occuring. > > > However, rcu_dereference() only generates a memory barrier on DEC > > Alpha, so there is normally no penalty for using it in the NULL-pointer > > case. So, when using rcu_dereference() unconditionally simplifies > > the code, it may make sense to "just do it". > > Here is what the code would look like: > > 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;
Admittedly only saves one line, but...
Thanx, Paul - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |