• Jon Paul Maloy's avatar
    tipc: remove premature ESTABLISH FSM event at link synchronization · ed43594a
    Jon Paul Maloy authored
    When a link between two nodes come up, both endpoints will initially
    send out a STATE message to the peer, to increase the probability that
    the peer endpoint also is up when the first traffic message arrives.
    Thereafter, if the establishing link is the second link between two
    nodes, this first "traffic" message is a TUNNEL_PROTOCOL/SYNCH message,
    helping the peer to perform initial synchronization between the two
    links.
    
    However, the initial STATE message may be lost, in which case the SYNCH
    message will be the first one arriving at the peer. This should also
    work, as the SYNCH message itself will be used to take up the link
    endpoint before  initializing synchronization.
    
    Unfortunately the code for this case is broken. Currently, the link is
    brought up through a tipc_link_fsm_evt(ESTABLISHED) when a SYNCH
    arrives, whereupon __tipc_node_link_up() is called to distribute the
    link slots and take the link into traffic. But, __tipc_node_link_up() is
    itself starting with a test for whether the link is up, and if true,
    returns without action. Clearly, the tipc_link_fsm_evt(ESTABLISHED) call
    is unnecessary, since tipc_node_link_up() is itself issuing such an
    event, but also harmful, since it inhibits tipc_node_link_up() to
    perform the test of its tasks, and the link endpoint in question hence
    is never taken into traffic.
    
    This problem has been exposed when we set up dual links between pre-
    and post-4.4 kernels, because the former ones don't send out the
    initial STATE message described above.
    
    We fix this by removing the unnecessary event call.
    Signed-off-by: default avatarJon Maloy <jon.maloy@ericsson.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    ed43594a
node.c 53.7 KB