From mboxrd@z Thu Jan 1 00:00:00 1970 From: Josh Triplett Subject: Re: [PATCH v2 tip/core/rcu 07/13] ipv6/ip6_tunnel: Apply rcu_access_pointer() to avoid sparse false positive Date: Wed, 9 Oct 2013 15:56:18 -0700 Message-ID: <20131009225617.GH11709@jtriplet-mobl1> References: <20131009212920.GA15413@linux.vnet.ibm.com> <1381354186-16285-1-git-send-email-paulmck@linux.vnet.ibm.com> <1381354186-16285-7-git-send-email-paulmck@linux.vnet.ibm.com> <1381354949.4971.20.camel@edumazet-glaptop.roam.corp.google.com> <20131009215747.GA5790@linux.vnet.ibm.com> <1381356624.4971.26.camel@edumazet-glaptop.roam.corp.google.com> <20131009223652.GC5790@linux.vnet.ibm.com> <1381359077.4971.37.camel@edumazet-glaptop.roam.corp.google.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: paulmck@linux.vnet.ibm.com, linux-kernel@vger.kernel.org, mingo@kernel.org, laijs@cn.fujitsu.com, dipankar@in.ibm.com, akpm@linux-foundation.org, mathieu.desnoyers@efficios.com, niv@us.ibm.com, tglx@linutronix.de, peterz@infradead.org, rostedt@goodmis.org, dhowells@redhat.com, edumazet@google.com, darren@dvhart.com, fweisbec@gmail.com, sbw@mit.edu, "David S. Miller" , Alexey Kuznetsov , James Morris , Hideaki YOSHIFUJI , Patrick McHardy , netdev@vger.kernel.org To: Eric Dumazet Return-path: Content-Disposition: inline In-Reply-To: <1381359077.4971.37.camel@edumazet-glaptop.roam.corp.google.com> Sender: linux-kernel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org On Wed, Oct 09, 2013 at 03:51:17PM -0700, Eric Dumazet wrote: > On Wed, 2013-10-09 at 15:36 -0700, Paul E. McKenney wrote: > > > That would work, though it would probably give sparse complaints. > > No sparse error here, as I said types are correct and SPARSE_RCU ready : > > diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c > index 583b77e..28f8495 100644 > --- a/net/ipv6/ip6_tunnel.c > +++ b/net/ipv6/ip6_tunnel.c > @@ -245,7 +245,7 @@ ip6_tnl_unlink(struct ip6_tnl_net *ip6n, struct ip6_tnl *t) > (iter = rtnl_dereference(*tp)) != NULL; > tp = &iter->next) { > if (t == iter) { > - rcu_assign_pointer(*tp, t->next); > + ACCESS_ONCE(*tp) = t->next; > break; > } > } I'd be really hesitant to introduce that type of direct assignment to an __rcu pointer without wrapping it in some appropriately named macro, or at the very least adding a comment. - Josh Triplett