From e959d08d3ef6e48bc3b726bcc07a4ebb9989be94 Mon Sep 17 00:00:00 2001 From: Lars Ellenberg Date: Sat, 4 Aug 2012 01:07:55 +0200 Subject: [PATCH] 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: Philipp Reisner Signed-off-by: Lars Ellenberg --- drivers/block/drbd/drbd_receiver.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c index 26c30fd..d507700 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c @@ -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 { -- 2.7.4