mirror of https://github.com/xemu-project/xemu.git
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>
This commit is contained in:
parent
2e9cdab300
commit
ad943dcb22
4
block.c
4
block.c
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue