aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilipp Reisner <philipp.reisner@linbit.com>2012-08-03 15:14:04 +0200
committerJens Axboe <axboe@kernel.dk>2012-10-30 08:39:01 +0100
commitc12a3d8c84a5e9913a97ca5e6513c913a7e5b288 (patch)
tree4956ee000b9c2e0af1e58914fc997eabf8d3a14a
parentdrbd: introduce stop-sector to online verify (diff)
downloadlinux-dev-c12a3d8c84a5e9913a97ca5e6513c913a7e5b288.tar.xz
linux-dev-c12a3d8c84a5e9913a97ca5e6513c913a7e5b288.zip
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 <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--drivers/block/drbd/drbd_receiver.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index 280735da1963..55c359a1a052 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -763,8 +763,6 @@ static int drbd_connect(struct drbd_conf *mdev)
if (drbd_request_state(mdev, NS(conn, C_WF_CONNECTION)) < SS_SUCCESS)
return -2;
- clear_bit(DISCARD_CONCURRENT, &mdev->flags);
-
sock = NULL;
msock = NULL;
@@ -784,6 +782,7 @@ static int drbd_connect(struct drbd_conf *mdev)
sock = s;
s = NULL;
} else if (!msock) {
+ clear_bit(DISCARD_CONCURRENT, &mdev->flags);
drbd_send_fp(mdev, s, P_HAND_SHAKE_M);
msock = s;
s = NULL;