[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 29/32] nbd/client-connection: add option for non-blocking conn
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[PATCH v4 29/32] nbd/client-connection: add option for non-blocking connection attempt |
Date: |
Thu, 10 Jun 2021 13:07:59 +0300 |
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>
---
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 10c8a0bcca..78d101b774 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 8caeafc8d3..bf2e939314 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 500b8591e8..250d094b4d 100644
--- a/nbd/client-connection.c
+++ b/nbd/client-connection.c
@@ -265,6 +265,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
@@ -273,7 +275,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;
@@ -313,6 +315,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.29.2
- [PATCH v4 14/32] block/nbd: rename NBDConnectThread to NBDClientConnection, (continued)
- [PATCH v4 14/32] block/nbd: rename NBDConnectThread to NBDClientConnection, Vladimir Sementsov-Ogievskiy, 2021/06/10
- [PATCH v4 27/32] block-coroutine-wrapper: allow non bdrv_ prefix, Vladimir Sementsov-Ogievskiy, 2021/06/10
- [PATCH v4 26/32] nbd/client-connection: return only one io channel, Vladimir Sementsov-Ogievskiy, 2021/06/10
- [PATCH v4 25/32] block/nbd: drop BDRVNBDState::sioc, Vladimir Sementsov-Ogievskiy, 2021/06/10
- [PATCH v4 16/32] block/nbd: introduce nbd_client_connection_release(), Vladimir Sementsov-Ogievskiy, 2021/06/10
- [PATCH v4 23/32] block/nbd: use negotiation of NBDClientConnection, Vladimir Sementsov-Ogievskiy, 2021/06/10
- [PATCH v4 22/32] block/nbd: split nbd_handle_updated_info out of nbd_client_handshake(), Vladimir Sementsov-Ogievskiy, 2021/06/10
- [PATCH v4 30/32] block/nbd: reuse nbd_co_do_establish_connection() in nbd_open(), Vladimir Sementsov-Ogievskiy, 2021/06/10
- [PATCH v4 24/32] block/nbd: don't touch s->sioc in nbd_teardown_connection(), Vladimir Sementsov-Ogievskiy, 2021/06/10
- [PATCH v4 29/32] nbd/client-connection: add option for non-blocking connection attempt,
Vladimir Sementsov-Ogievskiy <=
- [PATCH v4 28/32] block/nbd: split nbd_co_do_establish_connection out of nbd_reconnect_attempt, Vladimir Sementsov-Ogievskiy, 2021/06/10
- [PATCH v4 31/32] block/nbd: add nbd_client_connected() helper, Vladimir Sementsov-Ogievskiy, 2021/06/10
- [PATCH v4 32/32] block/nbd: safer transition to receiving request, Vladimir Sementsov-Ogievskiy, 2021/06/10
- Re: [PATCH v4 00/32] block/nbd: rework client connection, Eric Blake, 2021/06/11