Message ID | 20230808155852.2745350-2-stefanha@redhat.com |
---|---|
State | New |
Headers | show |
Series | block: change reqs_lock to QemuMutex | expand |
On Tue, Aug 08, 2023 at 11:58:51AM -0400, Stefan Hajnoczi wrote: > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> > --- > block/io.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) Reviewed-by: Eric Blake <eblake@redhat.com> > > 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 > >
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); } /**
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> --- block/io.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)