diff options
author | Andreas Gruenbacher | 2011-03-01 15:40:43 +0100 |
---|---|---|
committer | Philipp Reisner | 2011-10-14 16:47:51 +0200 |
commit | 71b1c1eb9c544141e743c4d14b3c576fd4c31a5a (patch) | |
tree | bf3205be10cc8941cd0f6b209ad56d3922d10b5f /drivers/block/drbd/drbd_receiver.c | |
parent | drbd: Replace atomic_add_return with atomic_inc_return (diff) | |
download | kernel-qcow2-linux-71b1c1eb9c544141e743c4d14b3c576fd4c31a5a.tar.gz kernel-qcow2-linux-71b1c1eb9c544141e743c4d14b3c576fd4c31a5a.tar.xz kernel-qcow2-linux-71b1c1eb9c544141e743c4d14b3c576fd4c31a5a.zip |
drbd: Use ping-timeout when waiting for missing ack packets
When the node with the discard flag resolves write conflicts in
dual-primary mode, it may determine that its peer has sent ack packets
on the metadata socket which did not arrive, yet. Wait for the next ack
with ping-timeout instead of a hard-coded 30 seconds.
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block/drbd/drbd_receiver.c')
-rw-r--r-- | drivers/block/drbd/drbd_receiver.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c index c61bf121bd0f..112098bc4c8c 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c @@ -1710,11 +1710,12 @@ static int drbd_wait_peer_seq(struct drbd_conf *mdev, const u32 packet_seq) } p_seq = mdev->peer_seq; spin_unlock(&mdev->peer_seq_lock); - timeout = schedule_timeout(30*HZ); + timeout = mdev->tconn->net_conf->ping_timeo*HZ/10; + timeout = schedule_timeout(timeout); spin_lock(&mdev->peer_seq_lock); if (timeout == 0 && p_seq == mdev->peer_seq) { ret = -ETIMEDOUT; - dev_err(DEV, "ASSERT FAILED waited 30 seconds for sequence update, forcing reconnect\n"); + dev_err(DEV, "Timed out waiting for missing ack packets; disconnecting\n"); break; } } |