On Thu, Apr 14, 2022 at 07:57:51PM +0200, Paolo Bonzini wrote: > Elevate s->in_flight early so that other incoming requests will wait > on the CoQueue in nbd_co_send_request; restart them after getting back > from nbd_reconnect_attempt. This could be after the reconnect timer or > nbd_cancel_in_flight have cancelled the attempt, so there is no > need anymore to cancel the requests there. > > nbd_co_send_request now handles both stopping and restarting pending > requests after a successful connection, and there is no need to > hold send_mutex in nbd_co_do_establish_connection. The current setup > is confusing because nbd_co_do_establish_connection is called both with > send_mutex taken and without it. Before the patch it uses free_sema which > (at least in theory...) is protected by send_mutex, after the patch it > does not anymore. > > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > --- > block/coroutines.h | 4 +-- > block/nbd.c | 66 ++++++++++++++++++++++------------------------ > 2 files changed, 33 insertions(+), 37 deletions(-) > > diff --git a/block/coroutines.h b/block/coroutines.h > index b293e943c8..8f6e438ef3 100644 > --- a/block/coroutines.h > +++ b/block/coroutines.h > @@ -59,7 +59,7 @@ int coroutine_fn bdrv_co_writev_vmstate(BlockDriverState > *bs, > QEMUIOVector *qiov, int64_t pos); > > int coroutine_fn > -nbd_co_do_establish_connection(BlockDriverState *bs, Error **errp); > +nbd_co_do_establish_connection(BlockDriverState *bs, bool blocking, Error > **errp);
Long line; probably worth wrapping. But that's cosmetic; I could do it while applying to my tree. Reviewed-by: Eric Blake <ebl...@redhat.com> -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org