From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Fri, 30 Nov 2007 00:04:20 +1100 From: Herbert Xu Subject: Re: [PATCH (resubmit)][BRIDGE] Properly dereference the br_should_route_hook Message-ID: <20071129130420.GA8487@gondor.apana.org.au> References: <474C43F4.5080704@openvz.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <474C43F4.5080704@openvz.org> List-Id: Linux Ethernet Bridging List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Pavel Emelyanov Cc: Linux Netdev List , "Paul E. McKenney" , bridge@lists.osdl.org, devel@openvz.org On Tue, Nov 27, 2007 at 07:21:08PM +0300, Pavel Emelyanov wrote: > This hook is protected with the RCU, so simple > > if (br_should_route_hook) > br_should_route_hook(...) > > is not enough on some architectures. > > Use the rcu_dereference/rcu_assign_pointer in this case. > > Fixed Stephen's comment concerning using the typeof(). > > Signed-off-by: Pavel Emelyanov Applied to net-2.6. Thanks Pavel! > static void __exit ebtable_broute_fini(void) > { > - br_should_route_hook = NULL; > + rcu_assign_pointer(br_should_route_hook, NULL); Just for the record, rcu_assign_pointer is never necessary when you're assigning NULL. The reason is that rcu_assign_pointer serves as a barrier between the initialisation of the content of what you're assigning and the actual assignment. Since NULL does not need to be initialised you don't need the barrier :) Hmm, perhaps we could even build this logic into rcu_assign_pointer. Then again, who still uses an Alpha? Mine died years ago :) Cheers, -- Visit Openswan at http://www.openswan.org/ Email: Herbert Xu ~{PmV>HI~} Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt