Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cb6518cb authored by Lars Ellenberg's avatar Lars Ellenberg Committed by Philipp Reisner
Browse files

drbd: when receive times out on meta socket, also check last receive time on data socket



If we have an asymetrically congested network, we may send P_PING,
but due to congestion, the corresponding P_PING_ACK would time out,
and we would drop a (congested, but otherwise) healthy connection
("PingAck did not arrive in time.")

Signed-off-by: default avatarPhilipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: default avatarLars Ellenberg <lars.ellenberg@linbit.com>
parent 5a8b4242
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -4602,6 +4602,11 @@ int drbd_asender(struct drbd_thread *thi)
			dev_err(DEV, "meta connection shut down by peer.\n");
			goto reconnect;
		} else if (rv == -EAGAIN) {
			/* If the data socket received something meanwhile,
			 * that is good enough: peer is still alive. */
			if (time_after(mdev->last_received,
				jiffies - mdev->meta.socket->sk->sk_rcvtimeo))
				continue;
			if (ping_timeout_active) {
				dev_err(DEV, "PingAck did not arrive in time.\n");
				goto reconnect;
@@ -4637,6 +4642,7 @@ int drbd_asender(struct drbd_thread *thi)
				goto reconnect;
		}
		if (received == expect) {
			mdev->last_received = jiffies;
			D_ASSERT(cmd != NULL);
			if (!cmd->process(mdev, h))
				goto reconnect;