* [PULL v2 00/34] NBD patches through 2021-06-15 @ 2021-06-18 17:31 Eric Blake 2021-06-18 17:31 ` [PULL v2 28/34] nbd/client-connection: return only one io channel Eric Blake 2021-06-21 10:24 ` [PULL v2 00/34] NBD patches through 2021-06-15 Peter Maydell 0 siblings, 2 replies; 3+ messages in thread From: Eric Blake @ 2021-06-18 17:31 UTC (permalink / raw) To: qemu-devel The following changes since commit 3ccf6cd0e3e1dfd663814640b3b18b55715d7a75: Merge remote-tracking branch 'remotes/kraxel/tags/audio-20210617-pull-request' into staging (2021-06-18 09:54:42 +0100) are available in the Git repository at: https://repo.or.cz/qemu/ericb.git tags/pull-nbd-2021-06-15-v2 for you to fetch changes up to bbfb7c2f350262f893642433dea66352fc168295: block/nbd: safer transition to receiving request (2021-06-18 12:21:22 -0500) v2: silence uninit variable warning [clang, Vladimir] only re-sending the affected patch ---------------------------------------------------------------- nbd patches for 2021-06-15 - bug fixes in coroutine aio context handling - rework NBD client connection logic to perform more work in coroutine ---------------------------------------------------------------- Paolo Bonzini (2): async: the main AioContext is only "current" if under the BQL tests: cover aio_co_enter from a worker thread without BQL taken Roman Kagan (2): block/nbd: fix channel object leak block/nbd: ensure ->connection_thread is always valid Vladimir Sementsov-Ogievskiy (30): co-queue: drop extra coroutine_fn marks block/nbd: fix how state is cleared on nbd_open() failure paths block/nbd: connect_thread_func(): do qio_channel_set_delay(false) qemu-sockets: introduce socket_address_parse_named_fd() block/nbd: call socket_address_parse_named_fd() in advance block/nbd: nbd_client_handshake(): fix leak of s->ioc block/nbd: BDRVNBDState: drop unused connect_err and connect_status block/nbd: simplify waking of nbd_co_establish_connection() block/nbd: drop thr->state block/nbd: bs-independent interface for nbd_co_establish_connection() block/nbd: make nbd_co_establish_connection_cancel() bs-independent block/nbd: rename NBDConnectThread to NBDClientConnection block/nbd: introduce nbd_client_connection_new() block/nbd: introduce nbd_client_connection_release() nbd: move connection code from block/nbd to nbd/client-connection nbd/client-connection: use QEMU_LOCK_GUARD nbd/client-connection: add possibility of negotiation nbd/client-connection: implement connection retry nbd/client-connection: shutdown connection on release block/nbd: split nbd_handle_updated_info out of nbd_client_handshake() block/nbd: use negotiation of NBDClientConnection block/nbd: don't touch s->sioc in nbd_teardown_connection() block/nbd: drop BDRVNBDState::sioc nbd/client-connection: return only one io channel block-coroutine-wrapper: allow non bdrv_ prefix block/nbd: split nbd_co_do_establish_connection out of nbd_reconnect_attempt nbd/client-connection: add option for non-blocking connection attempt block/nbd: reuse nbd_co_do_establish_connection() in nbd_open() block/nbd: add nbd_client_connected() helper block/nbd: safer transition to receiving request scripts/block-coroutine-wrapper.py | 7 +- block/coroutines.h | 6 + include/block/aio.h | 5 +- include/block/nbd.h | 18 ++ include/qemu/coroutine.h | 6 +- include/qemu/sockets.h | 11 + block/nbd.c | 585 ++++++++----------------------------- iothread.c | 9 +- nbd/client-connection.c | 388 ++++++++++++++++++++++++ stubs/iothread-lock.c | 2 +- stubs/iothread.c | 8 - tests/unit/iothread.c | 9 +- tests/unit/test-aio.c | 37 +++ util/async.c | 20 ++ util/main-loop.c | 1 + util/qemu-sockets.c | 19 ++ nbd/meson.build | 1 + stubs/meson.build | 1 - 18 files changed, 642 insertions(+), 491 deletions(-) create mode 100644 nbd/client-connection.c delete mode 100644 stubs/iothread.c *** BLURB HERE *** Paolo Bonzini (2): async: the main AioContext is only "current" if under the BQL tests: cover aio_co_enter from a worker thread without BQL taken Roman Kagan (2): block/nbd: fix channel object leak block/nbd: ensure ->connection_thread is always valid Vladimir Sementsov-Ogievskiy (30): co-queue: drop extra coroutine_fn marks block/nbd: fix how state is cleared on nbd_open() failure paths block/nbd: connect_thread_func(): do qio_channel_set_delay(false) qemu-sockets: introduce socket_address_parse_named_fd() block/nbd: call socket_address_parse_named_fd() in advance block/nbd: nbd_client_handshake(): fix leak of s->ioc block/nbd: BDRVNBDState: drop unused connect_err and connect_status block/nbd: simplify waking of nbd_co_establish_connection() block/nbd: drop thr->state block/nbd: bs-independent interface for nbd_co_establish_connection() block/nbd: make nbd_co_establish_connection_cancel() bs-independent block/nbd: rename NBDConnectThread to NBDClientConnection block/nbd: introduce nbd_client_connection_new() block/nbd: introduce nbd_client_connection_release() nbd: move connection code from block/nbd to nbd/client-connection nbd/client-connection: use QEMU_LOCK_GUARD nbd/client-connection: add possibility of negotiation nbd/client-connection: implement connection retry nbd/client-connection: shutdown connection on release block/nbd: split nbd_handle_updated_info out of nbd_client_handshake() block/nbd: use negotiation of NBDClientConnection block/nbd: don't touch s->sioc in nbd_teardown_connection() block/nbd: drop BDRVNBDState::sioc nbd/client-connection: return only one io channel block-coroutine-wrapper: allow non bdrv_ prefix block/nbd: split nbd_co_do_establish_connection out of nbd_reconnect_attempt nbd/client-connection: add option for non-blocking connection attempt block/nbd: reuse nbd_co_do_establish_connection() in nbd_open() block/nbd: add nbd_client_connected() helper block/nbd: safer transition to receiving request scripts/block-coroutine-wrapper.py | 7 +- block/coroutines.h | 6 + include/block/aio.h | 5 +- include/block/nbd.h | 18 + include/qemu/coroutine.h | 6 +- include/qemu/sockets.h | 11 + block/nbd.c | 585 +++++++---------------------- iothread.c | 9 +- nbd/client-connection.c | 388 +++++++++++++++++++ stubs/iothread-lock.c | 2 +- stubs/iothread.c | 8 - tests/unit/iothread.c | 9 +- tests/unit/test-aio.c | 37 ++ util/async.c | 20 + util/main-loop.c | 1 + util/qemu-sockets.c | 19 + nbd/meson.build | 1 + stubs/meson.build | 1 - 18 files changed, 642 insertions(+), 491 deletions(-) create mode 100644 nbd/client-connection.c delete mode 100644 stubs/iothread.c -- 2.31.1 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [PULL v2 28/34] nbd/client-connection: return only one io channel 2021-06-18 17:31 [PULL v2 00/34] NBD patches through 2021-06-15 Eric Blake @ 2021-06-18 17:31 ` Eric Blake 2021-06-21 10:24 ` [PULL v2 00/34] NBD patches through 2021-06-15 Peter Maydell 1 sibling, 0 replies; 3+ messages in thread From: Eric Blake @ 2021-06-18 17:31 UTC (permalink / raw) To: qemu-devel Cc: Kevin Wolf, Vladimir Sementsov-Ogievskiy, open list:Network Block Dev..., Max Reitz From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> block/nbd doesn't need underlying sioc channel anymore. So, we can update nbd/client-connection interface to return only one top-most io channel, which is more straight forward. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-Id: <20210610100802.5888-27-vsementsov@virtuozzo.com> [eblake: squash in Vladimir's fixes for uninit usage caught by clang] Signed-off-by: Eric Blake <eblake@redhat.com> --- include/block/nbd.h | 4 ++-- block/nbd.c | 13 ++----------- nbd/client-connection.c | 36 ++++++++++++++++++++++++++++-------- 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/include/block/nbd.h b/include/block/nbd.h index 5bb54d831c8a..10c8a0bcca80 100644 --- a/include/block/nbd.h +++ b/include/block/nbd.h @@ -418,9 +418,9 @@ NBDClientConnection *nbd_client_connection_new(const SocketAddress *saddr, QCryptoTLSCreds *tlscreds); void nbd_client_connection_release(NBDClientConnection *conn); -QIOChannelSocket *coroutine_fn +QIOChannel *coroutine_fn nbd_co_establish_connection(NBDClientConnection *conn, NBDExportInfo *info, - QIOChannel **ioc, Error **errp); + Error **errp); void coroutine_fn nbd_co_establish_connection_cancel(NBDClientConnection *conn); diff --git a/block/nbd.c b/block/nbd.c index 9f193d130bcd..411435c1559e 100644 --- a/block/nbd.c +++ b/block/nbd.c @@ -360,7 +360,6 @@ static coroutine_fn void nbd_reconnect_attempt(BDRVNBDState *s) { int ret; AioContext *aio_context = bdrv_get_aio_context(s->bs); - QIOChannelSocket *sioc; if (!nbd_client_connecting(s)) { return; @@ -399,20 +398,12 @@ static coroutine_fn void nbd_reconnect_attempt(BDRVNBDState *s) s->ioc = NULL; } - sioc = nbd_co_establish_connection(s->conn, &s->info, &s->ioc, NULL); - if (!sioc) { + s->ioc = nbd_co_establish_connection(s->conn, &s->info, NULL); + if (!s->ioc) { ret = -ECONNREFUSED; goto out; } - if (s->ioc) { - /* sioc is referenced by s->ioc */ - object_unref(OBJECT(sioc)); - } else { - s->ioc = QIO_CHANNEL(sioc); - } - sioc = NULL; - qio_channel_set_blocking(QIO_CHANNEL(s->ioc), false, NULL); qio_channel_attach_aio_context(QIO_CHANNEL(s->ioc), aio_context); diff --git a/nbd/client-connection.c b/nbd/client-connection.c index 883f9cf158cb..955edafb7ca4 100644 --- a/nbd/client-connection.c +++ b/nbd/client-connection.c @@ -272,15 +272,14 @@ void nbd_client_connection_release(NBDClientConnection *conn) * nbd_receive_export_list() would be zero (see description of NBDExportInfo in * include/block/nbd.h). */ -QIOChannelSocket *coroutine_fn +QIOChannel *coroutine_fn nbd_co_establish_connection(NBDClientConnection *conn, NBDExportInfo *info, - QIOChannel **ioc, Error **errp) + Error **errp) { QemuThread thread; if (conn->do_negotiation) { assert(info); - assert(ioc); } WITH_QEMU_LOCK_GUARD(&conn->mutex) { @@ -294,10 +293,19 @@ nbd_co_establish_connection(NBDClientConnection *conn, NBDExportInfo *info, if (conn->sioc) { /* Previous attempt finally succeeded in background */ if (conn->do_negotiation) { - *ioc = g_steal_pointer(&conn->ioc); memcpy(info, &conn->updated_info, sizeof(*info)); + if (conn->ioc) { + /* TLS channel now has own reference to parent */ + object_unref(OBJECT(conn->sioc)); + conn->sioc = NULL; + + return g_steal_pointer(&conn->ioc); + } } - return g_steal_pointer(&conn->sioc); + + assert(!conn->ioc); + + return QIO_CHANNEL(g_steal_pointer(&conn->sioc)); } conn->running = true; @@ -329,11 +337,23 @@ nbd_co_establish_connection(NBDClientConnection *conn, NBDExportInfo *info, } else { error_propagate(errp, conn->err); conn->err = NULL; - if (conn->sioc && conn->do_negotiation) { - *ioc = g_steal_pointer(&conn->ioc); + if (!conn->sioc) { + return NULL; + } + if (conn->do_negotiation) { memcpy(info, &conn->updated_info, sizeof(*info)); + if (conn->ioc) { + /* TLS channel now has own reference to parent */ + object_unref(OBJECT(conn->sioc)); + conn->sioc = NULL; + + return g_steal_pointer(&conn->ioc); + } } - return g_steal_pointer(&conn->sioc); + + assert(!conn->ioc); + + return QIO_CHANNEL(g_steal_pointer(&conn->sioc)); } } -- 2.31.1 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PULL v2 00/34] NBD patches through 2021-06-15 2021-06-18 17:31 [PULL v2 00/34] NBD patches through 2021-06-15 Eric Blake 2021-06-18 17:31 ` [PULL v2 28/34] nbd/client-connection: return only one io channel Eric Blake @ 2021-06-21 10:24 ` Peter Maydell 1 sibling, 0 replies; 3+ messages in thread From: Peter Maydell @ 2021-06-21 10:24 UTC (permalink / raw) To: Eric Blake; +Cc: QEMU Developers On Fri, 18 Jun 2021 at 18:34, Eric Blake <eblake@redhat.com> wrote: > > The following changes since commit 3ccf6cd0e3e1dfd663814640b3b18b55715d7a75: > > Merge remote-tracking branch 'remotes/kraxel/tags/audio-20210617-pull-request' into staging (2021-06-18 09:54:42 +0100) > > are available in the Git repository at: > > https://repo.or.cz/qemu/ericb.git tags/pull-nbd-2021-06-15-v2 > > for you to fetch changes up to bbfb7c2f350262f893642433dea66352fc168295: > > block/nbd: safer transition to receiving request (2021-06-18 12:21:22 -0500) > > v2: silence uninit variable warning [clang, Vladimir] > only re-sending the affected patch > > ---------------------------------------------------------------- > nbd patches for 2021-06-15 > > - bug fixes in coroutine aio context handling > - rework NBD client connection logic to perform more work in coroutine > Applied, thanks. Please update the changelog at https://wiki.qemu.org/ChangeLog/6.1 for any user-visible changes. -- PMM ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-06-21 10:47 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2021-06-18 17:31 [PULL v2 00/34] NBD patches through 2021-06-15 Eric Blake 2021-06-18 17:31 ` [PULL v2 28/34] nbd/client-connection: return only one io channel Eric Blake 2021-06-21 10:24 ` [PULL v2 00/34] NBD patches through 2021-06-15 Peter Maydell
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).