[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20071129130420.GA8487@gondor.apana.org.au>
Date: Fri, 30 Nov 2007 00:04:20 +1100
From: Herbert Xu <herbert@...dor.apana.org.au>
To: Pavel Emelyanov <xemul@...nvz.org>
Cc: Stephen Hemminger <shemminger@...ux-foundation.org>,
Linux Netdev List <netdev@...r.kernel.org>,
bridge@...ts.osdl.org, devel@...nvz.org,
"Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>
Subject: Re: [PATCH (resubmit)][BRIDGE] Properly dereference the br_should_route_hook
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 <xemul@...nvz.org>
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~} <herbert@...dor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists