diff options
author | Lars Ellenberg | 2011-04-27 10:25:28 +0200 |
---|---|---|
committer | Philipp Reisner | 2012-11-08 16:49:08 +0100 |
commit | d9cc6e231897a9ab1a94e6cfe12d71bfec0b7a81 (patch) | |
tree | f0ab01f5319972d672160f5ba1e1233f8bafbeb1 /drivers/block/drbd/drbd_receiver.c | |
parent | drbd: remove useless kobject_uevent from drbd_adm_connect (diff) | |
download | kernel-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.c | 2 |
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); } } |