summaryrefslogtreecommitdiffstats
path: root/drivers/block/drbd/drbd_receiver.c
diff options
context:
space:
mode:
authorLars Ellenberg2011-04-27 10:25:28 +0200
committerPhilipp Reisner2012-11-08 16:49:08 +0100
commitd9cc6e231897a9ab1a94e6cfe12d71bfec0b7a81 (patch)
treef0ab01f5319972d672160f5ba1e1233f8bafbeb1 /drivers/block/drbd/drbd_receiver.c
parentdrbd: remove useless kobject_uevent from drbd_adm_connect (diff)
downloadkernel-qcow2-linux-d9cc6e231897a9ab1a94e6cfe12d71bfec0b7a81.tar.gz
kernel-qcow2-linux-d9cc6e231897a9ab1a94e6cfe12d71bfec0b7a81.tar.xz
kernel-qcow2-linux-d9cc6e231897a9ab1a94e6cfe12d71bfec0b7a81.zip
drbd: fix various disconnecting races
If an admin requests disconnect at a time when the state handling already disconnects/reconnects, there have been some races. Make sure to always really stop the network threads before returning success for disconnect. Do not pretend successfull forced disconnect, if the state handling returned an error. Return success from drbd_adm_down() only after all threads are finished. 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.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index 4665ad79b4ae..6da7aebde8df 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -4226,7 +4226,7 @@ static void drbd_disconnect(struct drbd_tconn *tconn)
synchronize_rcu();
kfree(old_conf);
- conn_request_state(tconn, NS(conn, C_STANDALONE), CS_VERBOSE);
+ conn_request_state(tconn, NS(conn, C_STANDALONE), CS_VERBOSE | CS_HARD);
}
}