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

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

drbd: Fix a potential issue with the DISCARD_CONCURRENT flag



The DISCARD_CONCURRENT flag should be set on one node and cleared on the
other node.
As the code was before it was theoretical possible that a node accepts the
meta socket, but has to close it later on, and keeps the DISCARD_CONCURRENT
flag.
Correct this by moving the clear_bit(DISCARD_CONCURRENT) where the packet
gets sent.

Signed-off-by: default avatarPhilipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: default avatarLars Ellenberg <lars.ellenberg@linbit.com>
parent 519b6d3e
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -901,8 +901,6 @@ static int conn_connect(struct drbd_tconn *tconn)
	msock.rbuf = tconn->meta.rbuf;
	msock.socket = NULL;

	clear_bit(DISCARD_CONCURRENT, &tconn->flags);

	/* Assume that the peer only understands protocol 80 until we know better.  */
	tconn->agreed_pro_version = 80;

@@ -918,6 +916,7 @@ static int conn_connect(struct drbd_tconn *tconn)
				sock.socket = s;
				send_first_packet(tconn, &sock, P_INITIAL_DATA);
			} else if (!msock.socket) {
				clear_bit(DISCARD_CONCURRENT, &tconn->flags);
				msock.socket = s;
				send_first_packet(tconn, &msock, P_INITIAL_META);
			} else {