• Alexander Aring's avatar
    fs: dlm: make connection hash lockless · a47666eb
    Alexander Aring authored
    There are some problems with the connections_lock. During my
    experiements I saw sometimes circular dependencies with sock_lock.
    The reason here might be code parts which runs nodeid2con() before
    or after sock_lock is acquired.
    
    Another issue are missing locks in for_conn() iteration. Maybe this
    works fine because for_conn() is running in a context where
    connection_hash cannot be manipulated by others anymore.
    
    However this patch changes the connection_hash to be protected by
    sleepable rcu. The hotpath function __find_con() is implemented
    lockless as it is only a reader of connection_hash and this hopefully
    fixes the circular locking dependencies. The iteration for_conn() will
    still call some sleepable functionality, that's why we use sleepable rcu
    in this case.
    
    This patch removes the kmemcache functionality as I think I need to
    make some free() functionality via call_rcu(). However allocation time
    isn't here an issue. The dlm_allow_con will not be protected by a lock
    anymore as I think it's enough to just set and flush workqueues
    afterwards.
    Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
    Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
    a47666eb
Kconfig 529 Bytes