qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v3 00/33] block/nbd: rework client connection


From: Paolo Bonzini
Subject: Re: [PATCH v3 00/33] block/nbd: rework client connection
Date: Wed, 12 May 2021 08:54:06 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1

On 16/04/21 10:08, Vladimir Sementsov-Ogievskiy wrote:
The series substitutes "[PATCH v2 00/10] block/nbd: move connection code to separate 
file"
Supersedes: <20210408140827.332915-1-vsementsov@virtuozzo.com>
so it's called v3

block/nbd.c is overcomplicated. These series is a big refactoring, which
finally drops all the complications around drained sections and context
switching, including abuse of bs->in_flight counter.

Also, at the end of the series we don't cancel reconnect on drained
sections (and don't cancel requests waiting for reconnect on drained
section begin), which fixes a problem reported by Roman.

The series is also available at tag up-nbd-client-connection-v3 in
git https://src.openvz.org/scm/~vsementsov/qemu.git

I have independently done some rework of the connection state machine, mostly in order to use the QemuCoSleep API instead of aio_co_wake. In general it seems to be independent of this work. I'll review this series.

Paolo

v3:
Changes in first part of the series (main thing is not using refcnt, but 
instead (modified) Roman's patch):

01-04: new
05: add Roman's r-b
06: new
07: now, new aio_co_schedule(NULL, thr->wait_co) is used
08: reworked, we now need also bool detached, as we don't have refcnt
09,10: add Roman's r-b
11: rebased, don't modify nbd_free_connect_thread() name at this point
12: add Roman's r-b
13: new
14: rebased

Other patches are new.

Roman Kagan (2):
   block/nbd: fix channel object leak
   block/nbd: ensure ->connection_thread is always valid

Vladimir Sementsov-Ogievskiy (31):
   block/nbd: fix how state is cleared on nbd_open() failure paths
   block/nbd: nbd_client_handshake(): fix leak of s->ioc
   block/nbd: BDRVNBDState: drop unused connect_err and connect_status
   util/async: aio_co_schedule(): support reschedule in same ctx
   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
   qemu-socket: pass monitor link to socket_get_fd directly
   block/nbd: pass monitor directly to connection thread
   block/nbd: nbd_teardown_connection() don't touch s->sioc
   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: do qio_channel_set_delay(false)
   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_clinent_connected() helper
   block/nbd: safer transition to receiving request
   block/nbd: drop connection_co

  block/coroutines.h                 |   6 +
  include/block/aio.h                |   2 +-
  include/block/nbd.h                |  19 +
  include/io/channel-socket.h        |  20 +
  include/qemu/sockets.h             |   2 +-
  block/nbd.c                        | 908 +++++++----------------------
  io/channel-socket.c                |  17 +-
  nbd/client-connection.c            | 364 ++++++++++++
  nbd/client.c                       |   2 -
  tests/unit/test-util-sockets.c     |  16 +-
  util/async.c                       |   8 +
  util/qemu-sockets.c                |  10 +-
  nbd/meson.build                    |   1 +
  scripts/block-coroutine-wrapper.py |   7 +-
  14 files changed, 666 insertions(+), 716 deletions(-)
  create mode 100644 nbd/client-connection.c





reply via email to

[Prev in Thread] Current Thread [Next in Thread]