[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC PATCH 4/4] hw/block/virtio-blk: Use automatic AIO context lock
From: |
Philippe Mathieu-Daudé |
Subject: |
[RFC PATCH 4/4] hw/block/virtio-blk: Use automatic AIO context lock |
Date: |
Tue, 5 Oct 2021 20:58:07 +0200 |
Use the automatic AIO context acquire/release in virtio_blk_reset().
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
hw/block/virtio-blk.c | 26 ++++++++++++--------------
1 file changed, 12 insertions(+), 14 deletions(-)
diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
index f139cd7cc9c..2dd6428e7b3 100644
--- a/hw/block/virtio-blk.c
+++ b/hw/block/virtio-blk.c
@@ -896,24 +896,22 @@ static void virtio_blk_dma_restart_cb(void *opaque, bool
running,
static void virtio_blk_reset(VirtIODevice *vdev)
{
VirtIOBlock *s = VIRTIO_BLK(vdev);
- AioContext *ctx;
VirtIOBlockReq *req;
- ctx = blk_get_aio_context(s->blk);
- aio_context_acquire(ctx);
- blk_drain(s->blk);
-
- /* We drop queued requests after blk_drain() because blk_drain() itself can
- * produce them. */
- while (s->rq) {
- req = s->rq;
- s->rq = req->next;
- virtqueue_detach_element(req->vq, &req->elem, 0);
- virtio_blk_free_request(req);
+ WITH_AIO_CONTEXT_ACQUIRE_GUARD(blk_get_aio_context(s->blk)) {
+ blk_drain(s->blk);
+ /*
+ * We drop queued requests after blk_drain() because
+ * blk_drain() itself can produce them.
+ */
+ while (s->rq) {
+ req = s->rq;
+ s->rq = req->next;
+ virtqueue_detach_element(req->vq, &req->elem, 0);
+ virtio_blk_free_request(req);
+ }
}
- aio_context_release(ctx);
-
assert(!s->dataplane_started);
blk_set_enable_write_cache(s->blk, s->original_wce);
}
--
2.31.1