All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* [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.