[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 03/11] blockdev: acquire AioContext in blockdev_mark
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PATCH 03/11] blockdev: acquire AioContext in blockdev_mark_auto_del() |
Date: |
Wed, 1 Oct 2014 18:01:51 +0100 |
When an emulated storage controller is unrealized it will call
blockdev_mark_auto_del(). This will cancel any running block job (and
that eventually releases its reference to the BDS so it can be freed).
Since the block job may be executing in another AioContext we must
acquire/release to ensure thread safety.
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
blockdev.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/blockdev.c b/blockdev.c
index 270425d..5e38f34 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -89,14 +89,21 @@ static const int if_max_devs[IF_COUNT] = {
void blockdev_mark_auto_del(BlockDriverState *bs)
{
DriveInfo *dinfo = drive_get_by_blockdev(bs);
+ AioContext *aio_context;
if (dinfo && !dinfo->enable_auto_del) {
return;
}
+ aio_context = bdrv_get_aio_context(bs);
+ aio_context_acquire(aio_context);
+
if (bs->job) {
block_job_cancel(bs->job);
}
+
+ aio_context_release(aio_context);
+
if (dinfo) {
dinfo->auto_del = 1;
}
--
1.9.3
- [Qemu-devel] [PATCH 00/11] block: allow blockjobs to coexist with dataplane, Stefan Hajnoczi, 2014/10/01
- [Qemu-devel] [PATCH 01/11] block: acquire AioContext in generic blockjob QMP commands, Stefan Hajnoczi, 2014/10/01
- [Qemu-devel] [PATCH 03/11] blockdev: acquire AioContext in blockdev_mark_auto_del(),
Stefan Hajnoczi <=
- [Qemu-devel] [PATCH 02/11] blockdev: acquire AioContext in do_qmp_query_block_jobs_one(), Stefan Hajnoczi, 2014/10/01
- [Qemu-devel] [PATCH 04/11] blockdev: add note that block_job_cb() must be thread-safe, Stefan Hajnoczi, 2014/10/01
- [Qemu-devel] [PATCH 05/11] blockjob: add block_job_defer_to_main_loop(), Stefan Hajnoczi, 2014/10/01
- [Qemu-devel] [PATCH 06/11] block: add bdrv_drain(), Stefan Hajnoczi, 2014/10/01