aboutsummaryrefslogtreecommitdiff
path: root/block
diff options
context:
space:
mode:
authorKevin Wolf <kwolf@redhat.com>2023-05-25 14:47:06 +0200
committerKevin Wolf <kwolf@redhat.com>2023-05-30 17:21:23 +0200
commit2626d27f50f3c993936db04bc6e92d553e1dc914 (patch)
tree6b445ed22eb5578a109ac06235c834bab860e02c /block
parent4c20dd24b1178c78c47bf323173360b85e65e1e1 (diff)
downloadqemu-2626d27f50f3c993936db04bc6e92d553e1dc914.zip
qemu-2626d27f50f3c993936db04bc6e92d553e1dc914.tar.gz
qemu-2626d27f50f3c993936db04bc6e92d553e1dc914.tar.bz2
mirror: Hold main AioContext lock for calling bdrv_open_backing_file()
bdrv_open_backing_file() calls bdrv_open_inherit(), so all callers must hold the main AioContext lock. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20230525124713.401149-6-kwolf@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'block')
-rw-r--r--block/mirror.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/block/mirror.c b/block/mirror.c
index b7d92d1..d3cacd1 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -662,11 +662,15 @@ static int mirror_exit_common(Job *job)
bool abort = job->ret < 0;
int ret = 0;
+ GLOBAL_STATE_CODE();
+
if (s->prepared) {
return 0;
}
s->prepared = true;
+ aio_context_acquire(qemu_get_aio_context());
+
mirror_top_bs = s->mirror_top_bs;
bs_opaque = mirror_top_bs->opaque;
src = mirror_top_bs->backing->bs;
@@ -789,6 +793,8 @@ static int mirror_exit_common(Job *job)
bdrv_unref(mirror_top_bs);
bdrv_unref(src);
+ aio_context_release(qemu_get_aio_context());
+
return ret;
}