On Tue, Apr 02, 2019 at 10:07:45AM +1100, NeilBrown wrote: > nested_table_alloc() relies on the fact that there is > at most one spinlock allocated for every slot in the top > level nested table, so it is not possible for two threads > to try to allocate the same table at the same time. > > This assumption is a little fragile (it is not explicit) and is > unnecessary as cmpxchg() can be used instead. > > A future patch will replace the spinlocks by per-bucket bitlocks, > and then we won't be able to protect the slot pointer with a spinlock. > > So replace rcu_assign_pointer() with cmpxchg() - which has equivalent > barrier properties. > If it the cmp fails, free the table that was just allocated. > > Signed-off-by: NeilBrown <ne...@suse.com>
Acked-by: Herbert Xu <herb...@gondor.apana.org.au> -- Email: Herbert Xu <herb...@gondor.apana.org.au> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt