drbd: fix disconnect/reconnect loop, if ping-timeout == ping-int
authorLars Ellenberg <lars.ellenberg@linbit.com>
Wed, 9 Mar 2011 21:44:55 +0000 (22:44 +0100)
committerPhilipp Reisner <philipp.reisner@linbit.com>
Tue, 24 May 2011 08:03:30 +0000 (10:03 +0200)
commitf36af18c7b4ea1ba333c09b606bb4a7e5af66b4d
tree6983acfaa859fee028b2927f8f520a27e1785c4d
parent53ea433145d9a56c7ad5e69f21f5662053e00e84
drbd: fix disconnect/reconnect loop, if ping-timeout == ping-int

If there is no replication traffic within the idle timeout
(ping-int seconds), DRBD will send a P_PING,
and adjust the timeout to ping-timeout.

If there is no P_PING_ACK received within this ping-timeout,
DRBD finally drops the connection, and tries to re-establish it.

To decide which timeout was active, we compared the current timeout
with the ping-timeout, and dropped the connection, if that was the case.

By default, ping-int is 10 seconds, ping-timeout is 500 ms.

Unfortunately, if you configure ping-timeout to be the same as ping-int,
expiry of the idle-timeout had been mistaken for a missing ping ack,
and caused an immediate reconnection attempt.

Fix:
Allow both timeouts to be equal, use a local variable
to store which timeout is active.

Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
drivers/block/drbd/drbd_receiver.c