[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 03/11] blockdev: acquire AioContext in blockdev_m
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PATCH v2 03/11] blockdev: acquire AioContext in blockdev_mark_auto_del() |
Date: |
Tue, 21 Oct 2014 12:03:52 +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>
Reviewed-by: Max Reitz <address@hidden>
---
blockdev.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/blockdev.c b/blockdev.c
index fd55904..c46876c 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -113,14 +113,21 @@ void override_max_devs(BlockInterfaceType type, int
max_devs)
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 v2 00/11] block: allow blockjobs to coexist with dataplane, Stefan Hajnoczi, 2014/10/21
- [Qemu-devel] [PATCH v2 01/11] block: acquire AioContext in generic blockjob QMP commands, Stefan Hajnoczi, 2014/10/21
- [Qemu-devel] [PATCH v2 02/11] blockdev: acquire AioContext in do_qmp_query_block_jobs_one(), Stefan Hajnoczi, 2014/10/21
- [Qemu-devel] [PATCH v2 03/11] blockdev: acquire AioContext in blockdev_mark_auto_del(),
Stefan Hajnoczi <=
- [Qemu-devel] [PATCH v2 04/11] blockdev: add note that block_job_cb() must be thread-safe, Stefan Hajnoczi, 2014/10/21
- [Qemu-devel] [PATCH v2 05/11] blockjob: add block_job_defer_to_main_loop(), Stefan Hajnoczi, 2014/10/21
- [Qemu-devel] [PATCH v2 06/11] block: add bdrv_drain(), Stefan Hajnoczi, 2014/10/21
- [Qemu-devel] [PATCH v2 07/11] block: let backup blockjob run in BDS AioContext, Stefan Hajnoczi, 2014/10/21
- [Qemu-devel] [PATCH v2 09/11] block: let mirror blockjob run in BDS AioContext, Stefan Hajnoczi, 2014/10/21
- [Qemu-devel] [PATCH v2 08/11] block: let stream blockjob run in BDS AioContext, Stefan Hajnoczi, 2014/10/21
- [Qemu-devel] [PATCH v2 10/11] block: let commit blockjob run in BDS AioContext, Stefan Hajnoczi, 2014/10/21
- [Qemu-devel] [PATCH v2 11/11] block: declare blockjobs and dataplane friends!, Stefan Hajnoczi, 2014/10/21