block: minimize bs->reqs_lock section in tracked_request_end()
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Message-ID: <20230808155852.2745350-2-stefanha@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
65c23ef1e4
commit
3480ce69a9
@ -593,8 +593,14 @@ static void coroutine_fn tracked_request_end(BdrvTrackedRequest *req)
|
|||||||
|
|
||||||
qemu_co_mutex_lock(&req->bs->reqs_lock);
|
qemu_co_mutex_lock(&req->bs->reqs_lock);
|
||||||
QLIST_REMOVE(req, list);
|
QLIST_REMOVE(req, list);
|
||||||
qemu_co_queue_restart_all(&req->wait_queue);
|
|
||||||
qemu_co_mutex_unlock(&req->bs->reqs_lock);
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user