diff options
author | Kevin Wolf <kwolf@redhat.com> | 2019-04-24 18:04:42 +0200 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2019-06-04 15:22:22 +0200 |
commit | ad943dcb226a083a0c433ae73737c4834f8cfe74 (patch) | |
tree | e38cb98f7a2563abadc4616114e3f58b827f803c | |
parent | 2e9cdab3000530fdd03df7f0a5d124eaa0ae942f (diff) | |
download | qemu-ad943dcb226a083a0c433ae73737c4834f8cfe74.zip qemu-ad943dcb226a083a0c433ae73737c4834f8cfe74.tar.gz qemu-ad943dcb226a083a0c433ae73737c4834f8cfe74.tar.bz2 |
block: Move node without parents to main AioContext
A node should only be in a non-default AioContext if a user is attached
to it that requires this. When the last parent of a node is gone, it can
move back to the main AioContext.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
-rw-r--r-- | block.c | 4 | ||||
-rw-r--r-- | tests/test-bdrv-drain.c | 2 | ||||
-rw-r--r-- | tests/test-block-iothread.c | 3 |
3 files changed, 6 insertions, 3 deletions
@@ -2235,6 +2235,10 @@ static void bdrv_replace_child(BdrvChild *child, BlockDriverState *new_bs) bdrv_get_cumulative_perm(old_bs, &perm, &shared_perm); bdrv_check_perm(old_bs, NULL, perm, shared_perm, NULL, &error_abort); bdrv_set_perm(old_bs, perm, shared_perm); + + /* When the parent requiring a non-default AioContext is removed, the + * node moves back to the main AioContext */ + bdrv_try_set_aio_context(old_bs, qemu_get_aio_context(), NULL); } if (new_bs) { diff --git a/tests/test-bdrv-drain.c b/tests/test-bdrv-drain.c index 16ea2b8..44e658b 100644 --- a/tests/test-bdrv-drain.c +++ b/tests/test-bdrv-drain.c @@ -1003,7 +1003,7 @@ static void test_blockjob_common_drain_node(enum drain_type drain_type, if (use_iothread) { blk_set_aio_context(blk_src, qemu_get_aio_context(), &error_abort); - blk_set_aio_context(blk_target, qemu_get_aio_context(), &error_abort); + assert(blk_get_aio_context(blk_target) == qemu_get_aio_context()); } aio_context_release(ctx); diff --git a/tests/test-block-iothread.c b/tests/test-block-iothread.c index f41082e..79d9cf8 100644 --- a/tests/test-block-iothread.c +++ b/tests/test-block-iothread.c @@ -713,9 +713,8 @@ static void test_attach_preserve_blk_ctx(void) /* Remove the node again */ blk_remove_bs(blk); - /* TODO bs should move back to main context here */ g_assert(blk_get_aio_context(blk) == ctx); - g_assert(bdrv_get_aio_context(bs) == ctx); + g_assert(bdrv_get_aio_context(bs) == qemu_get_aio_context()); /* Re-attach the node */ blk_insert_bs(blk, bs, &error_abort); |