v4: Now based on new Paolo's patch: Based-on: <20210609122234.544153-1-pbonz...@redhat.com>
Also, I've dropped patch 33 for now, it's too much for this series. I'll resend it later on top of this. The series is also available at tag up-nbd-client-connection-v4 in git https://src.openvz.org/scm/~vsementsov/qemu.git 01: new 02: add Eric's r-b 03: add Roman's and Eric's r-bs 04: rebased to start of the series 05-06: new 07: tweak comment, add Eric's r-b 08: add Roman's r-b 09: add Eric's r-b 10: tweak comment, use aio_co_wake (after Paolo's fix), keep calling aio_co_wake after mutex in nbd_co_establish_connection_cancel 11: improve comments, change logic a bit 12: add Eric's r-b, fix grammar 13: add Eric's r-b, improve wording 14: add Roman's and Eric's r-bs 15: add Eric's r-b, fix commit message 16: rebased 17: add Eric's r-b, rebased on some changes, but still a clear movement. 18: rebased, changed 19: rebased, tweak comment 20: tweak wording, add comment 21: rebased, tweak wording 22: add Roman's and Eric's r-bs, tweak comment 23: add Eric's r-b, tweak commit message 24: add Eric's r-b, tweak commit message and subject 25-26: add Eric's r-b 27: add Eric's r-b, tweak commit message 28: tweak commit message, keep coroutine_fn 29: add Eric's r-b, tweak commit message 30: add Eric's r-b, add whitespace in comment 31: add Eric's r-b, fix s/clinen?t/client/ 32: add Eric's r-b, rebased 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 block/coroutines.h | 6 + include/block/nbd.h | 18 + include/qemu/coroutine.h | 6 +- include/qemu/sockets.h | 14 + block/nbd.c | 553 ++++++----------------------- nbd/client-connection.c | 384 ++++++++++++++++++++ util/qemu-sockets.c | 19 + nbd/meson.build | 1 + scripts/block-coroutine-wrapper.py | 7 +- 9 files changed, 560 insertions(+), 448 deletions(-) create mode 100644 nbd/client-connection.c -- 2.29.2