• NeilBrown's avatar
    rhashtable: use cmpxchg() in nested_table_alloc() · 7a41c294
    NeilBrown authored
    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: default avatarNeilBrown <neilb@suse.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    7a41c294
rhashtable.c 29.2 KB