* [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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.