tipc: fix failover problem
authorLUU Duc Canh <canh.d.luu@dektech.com.au>
Wed, 26 Sep 2018 19:00:54 +0000 (21:00 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sat, 29 Sep 2018 18:45:14 +0000 (11:45 -0700)
commitc140eb166d681f66bd7e99fb121357db1a503e7f
tree9eda87117d15507035fd046a9f9c3d610f0013fc
parent418b9a353a821f5d1787fd310d2af31232e9ff32
tipc: fix failover problem

We see the following scenario:
1) Link endpoint B on node 1 discovers that its peer endpoint is gone.
   Since there is a second working link, failover procedure is started.
2) Link endpoint A on node 1 sends a FAILOVER message to peer endpoint
   A on node 2. The node item 1->2 goes to state FAILINGOVER.
3) Linke endpoint A/2 receives the failover, and is supposed to take
   down its parallell link endpoint B/2, while producing a FAILOVER
   message to send back to A/1.
4) However, B/2 has already been deleted, so no FAILOVER message can
   created.
5) Node 1->2 remains in state FAILINGOVER forever, refusing to receive
   any messages that can bring B/1 up again. We are left with a non-
   redundant link between node 1 and 2.

We fix this with letting endpoint A/2 build a dummy FAILOVER message
to send to back to A/1, so that the situation can be resolved.

Signed-off-by: LUU Duc Canh <canh.d.luu@dektech.com.au>
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/tipc/link.c
net/tipc/link.h
net/tipc/node.c