aboutsummaryrefslogtreecommitdiff
path: root/block
diff options
context:
space:
mode:
authorVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>2021-06-10 13:07:43 +0300
committerEric Blake <eblake@redhat.com>2021-06-18 10:59:53 -0500
commitc3e77304855040ffd390cb7abaf7ec9ebb9b714c (patch)
treee7fbcab28d3f8acf1775e966b68dd1b2a9ecc24e /block
parentd33833d7af73641d26b836a40f0bc697b656859b (diff)
downloadqemu-c3e77304855040ffd390cb7abaf7ec9ebb9b714c.zip
qemu-c3e77304855040ffd390cb7abaf7ec9ebb9b714c.tar.gz
qemu-c3e77304855040ffd390cb7abaf7ec9ebb9b714c.tar.bz2
block/nbd: make nbd_co_establish_connection_cancel() bs-independent
nbd_co_establish_connection_cancel() actually needs only pointer to NBDConnectThread. So, make it clean. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Roman Kagan <rvkagan@yandex-team.ru> Reviewed-by: Eric Blake <eblake@redhat.com> Message-Id: <20210610100802.5888-14-vsementsov@virtuozzo.com> Signed-off-by: Eric Blake <eblake@redhat.com>
Diffstat (limited to 'block')
-rw-r--r--block/nbd.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/block/nbd.c b/block/nbd.c
index 15b569a..bee615e 100644
--- a/block/nbd.c
+++ b/block/nbd.c
@@ -132,7 +132,7 @@ static int nbd_establish_connection(BlockDriverState *bs, SocketAddress *saddr,
Error **errp);
static coroutine_fn QIOChannelSocket *
nbd_co_establish_connection(NBDConnectThread *thr, Error **errp);
-static void nbd_co_establish_connection_cancel(BlockDriverState *bs);
+static void nbd_co_establish_connection_cancel(NBDConnectThread *thr);
static int nbd_client_handshake(BlockDriverState *bs, Error **errp);
static void nbd_yank(void *opaque);
@@ -295,7 +295,7 @@ static void coroutine_fn nbd_client_co_drain_begin(BlockDriverState *bs)
s->drained = true;
qemu_co_sleep_wake(&s->reconnect_sleep);
- nbd_co_establish_connection_cancel(bs);
+ nbd_co_establish_connection_cancel(s->connect_thread);
reconnect_delay_timer_del(s);
@@ -333,7 +333,7 @@ static void nbd_teardown_connection(BlockDriverState *bs)
s->state = NBD_CLIENT_QUIT;
if (s->connection_co) {
qemu_co_sleep_wake(&s->reconnect_sleep);
- nbd_co_establish_connection_cancel(bs);
+ nbd_co_establish_connection_cancel(s->connect_thread);
}
if (qemu_in_coroutine()) {
s->teardown_co = qemu_coroutine_self();
@@ -488,13 +488,14 @@ nbd_co_establish_connection(NBDConnectThread *thr, Error **errp)
/*
* nbd_co_establish_connection_cancel
- * Cancel nbd_co_establish_connection asynchronously: it will finish soon, to
- * allow drained section to begin.
+ * Cancel nbd_co_establish_connection() asynchronously.
+ *
+ * Note that this function neither directly stops the thread nor closes the
+ * socket, but rather safely wakes nbd_co_establish_connection() which is
+ * sleeping in yield()
*/
-static void nbd_co_establish_connection_cancel(BlockDriverState *bs)
+static void nbd_co_establish_connection_cancel(NBDConnectThread *thr)
{
- BDRVNBDState *s = bs->opaque;
- NBDConnectThread *thr = s->connect_thread;
Coroutine *wait_co;
qemu_mutex_lock(&thr->mutex);