From: Jon Maloy <jon.ma...@ericsson.com> Date: Tue, 8 Aug 2017 22:23:56 +0200
> 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: Jon Maloy <jon.ma...@ericsson.com> Applied.