aboutsummaryrefslogtreecommitdiff
path: root/block/block-backend.c
diff options
context:
space:
mode:
authorKevin Wolf <kwolf@redhat.com>2023-05-04 13:57:32 +0200
committerKevin Wolf <kwolf@redhat.com>2023-05-10 14:16:53 +0200
commitda4afaff074e56b0fa0d25abf865784148018895 (patch)
tree4925a8d084e0d7f6356606aa1be88f3f43751e76 /block/block-backend.c
parent0050c163ff6d8167e07c9fc4be7f728316140cb6 (diff)
downloadqemu-da4afaff074e56b0fa0d25abf865784148018895.zip
qemu-da4afaff074e56b0fa0d25abf865784148018895.tar.gz
qemu-da4afaff074e56b0fa0d25abf865784148018895.tar.bz2
block: Consistently call bdrv_activate() outside coroutine
Migration code can call bdrv_activate() in coroutine context, whereas other callers call it outside of coroutines. As it calls other code that is not supposed to run in coroutines, standardise on running outside of coroutines. This adds a no_co_wrapper to switch to the main loop before calling bdrv_activate(). Cc: qemu-stable@nongnu.org Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Message-Id: <20230504115750.54437-3-kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'block/block-backend.c')
-rw-r--r--block/block-backend.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/block/block-backend.c b/block/block-backend.c
index fc530de..e37d55d 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -2024,7 +2024,15 @@ void blk_activate(BlockBackend *blk, Error **errp)
return;
}
- bdrv_activate(bs, errp);
+ /*
+ * Migration code can call this function in coroutine context, so leave
+ * coroutine context if necessary.
+ */
+ if (qemu_in_coroutine()) {
+ bdrv_co_activate(bs, errp);
+ } else {
+ bdrv_activate(bs, errp);
+ }
}
bool coroutine_fn blk_co_is_inserted(BlockBackend *blk)