• Ying Xue's avatar
    tipc: move the delivery of named messages out of nametbl lock · eab8c045
    Ying Xue authored
    Commit a89778d8 ("tipc: add support
    for link state subscriptions") introduced below possible deadlock
    scenario:
    
           CPU0                          CPU1
    T0:   tipc_publish()                 link_timeout()
    T1:   tipc_nametbl_publish()         [grab node lock]*
    T2:   [grab nametbl write lock]*     link_state_event()
    T3:   named_cluster_distribute()     link_activate()
    T4:   [grab node lock]*              tipc_node_link_up()
    T5:                                  tipc_nametbl_publish()
    T6:                                  [grab nametble write lock]*
    
    The opposite order of holding nametbl write lock and node lock on
    above two different paths may result in a deadlock. If we move the
    the delivery of named messages via link out of name nametbl lock,
    the reverse order of holding locks will be eliminated, as a result,
    the deadlock will be killed as well.
    Signed-off-by: default avatarYing Xue <ying.xue@windriver.com>
    Reviewed-by: default avatarErik Hugne <erik.hugne@ericsson.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    eab8c045
name_table.c 26.3 KB