On Tue, Aug 08, 2023 at 11:58:51AM -0400, Stefan Hajnoczi wrote: > Signed-off-by: Stefan Hajnoczi <[email protected]> > --- > block/io.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-)
Reviewed-by: Eric Blake <[email protected]> > > diff --git a/block/io.c b/block/io.c > index 055fcf7438..85d5176256 100644 > --- a/block/io.c > +++ b/block/io.c > @@ -593,8 +593,14 @@ static void coroutine_fn > tracked_request_end(BdrvTrackedRequest *req) > > qemu_co_mutex_lock(&req->bs->reqs_lock); > QLIST_REMOVE(req, list); > + qemu_co_mutex_unlock(&req->bs->reqs_lock); > + > + /* > + * At this point qemu_co_queue_wait(&req->wait_queue, ...) won't be > called > + * anymore because the request has been removed from the list, so it's > safe > + * to restart the queue outside reqs_lock to minimize the critical > section. > + */ > qemu_co_queue_restart_all(&req->wait_queue); > - qemu_co_mutex_unlock(&req->bs->reqs_lock); > } > > /** > -- > 2.41.0 > > -- Eric Blake, Principal Software Engineer Red Hat, Inc. Virtualization: qemu.org | libguestfs.org
