[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 31/34] nbd/client-connection: add option for non-blocking connecti
From: |
Eric Blake |
Subject: |
[PULL 31/34] nbd/client-connection: add option for non-blocking connection attempt |
Date: |
Tue, 15 Jun 2021 15:47:53 -0500 |
From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
We'll need a possibility of non-blocking nbd_co_establish_connection(),
so that it returns immediately, and it returns success only if a
connections was previously established in background.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-Id: <20210610100802.5888-30-vsementsov@virtuozzo.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
---
include/block/nbd.h | 2 +-
block/nbd.c | 2 +-
nbd/client-connection.c | 8 +++++++-
3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/include/block/nbd.h b/include/block/nbd.h
index 10c8a0bcca80..78d101b77488 100644
--- a/include/block/nbd.h
+++ b/include/block/nbd.h
@@ -420,7 +420,7 @@ void nbd_client_connection_release(NBDClientConnection
*conn);
QIOChannel *coroutine_fn
nbd_co_establish_connection(NBDClientConnection *conn, NBDExportInfo *info,
- Error **errp);
+ bool blocking, Error **errp);
void coroutine_fn nbd_co_establish_connection_cancel(NBDClientConnection
*conn);
diff --git a/block/nbd.c b/block/nbd.c
index 8caeafc8d351..bf2e9393146b 100644
--- a/block/nbd.c
+++ b/block/nbd.c
@@ -364,7 +364,7 @@ static int coroutine_fn
nbd_co_do_establish_connection(BlockDriverState *bs,
assert(!s->ioc);
- s->ioc = nbd_co_establish_connection(s->conn, &s->info, errp);
+ s->ioc = nbd_co_establish_connection(s->conn, &s->info, true, errp);
if (!s->ioc) {
return -ECONNREFUSED;
}
diff --git a/nbd/client-connection.c b/nbd/client-connection.c
index 72138a5ff74a..aff646028786 100644
--- a/nbd/client-connection.c
+++ b/nbd/client-connection.c
@@ -266,6 +266,8 @@ void nbd_client_connection_release(NBDClientConnection
*conn)
* otherwise the thread is not running, so start a thread and wait for
* completion
*
+ * If @blocking is false, don't wait for the thread, return immediately.
+ *
* If @info is not NULL, also do nbd-negotiation after successful connection.
* In this case info is used only as out parameter, and is fully initialized by
* nbd_co_establish_connection(). "IN" fields of info as well as related only
to
@@ -274,7 +276,7 @@ void nbd_client_connection_release(NBDClientConnection
*conn)
*/
QIOChannel *coroutine_fn
nbd_co_establish_connection(NBDClientConnection *conn, NBDExportInfo *info,
- Error **errp)
+ bool blocking, Error **errp)
{
QIOChannel *ioc;
QemuThread thread;
@@ -314,6 +316,10 @@ nbd_co_establish_connection(NBDClientConnection *conn,
NBDExportInfo *info,
connect_thread_func, conn,
QEMU_THREAD_DETACHED);
}
+ if (!blocking) {
+ return NULL;
+ }
+
conn->wait_co = qemu_coroutine_self();
}
--
2.31.1
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PULL 31/34] nbd/client-connection: add option for non-blocking connection attempt,
Eric Blake <=