This is nop for non-dataplane case, but it prevents crash (virtio_scsi_ctx_check assertion failure) when a scsi-cd change operation happens on a virtio-scsi dataplane device.
Cc: qemu-sta...@nongnu.org Signed-off-by: Fam Zheng <f...@redhat.com> --- block/block-backend.c | 7 +++++++ include/block/block_int.h | 1 + 2 files changed, 8 insertions(+) diff --git a/block/block-backend.c b/block/block-backend.c index d1349d9..c2cae9a 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -1570,6 +1570,7 @@ void blk_update_root_state(BlockBackend *blk) blk->root_state.open_flags = blk->root->bs->open_flags; blk->root_state.read_only = blk->root->bs->read_only; blk->root_state.detect_zeroes = blk->root->bs->detect_zeroes; + blk->root_state.aio_context = blk->root->bs->aio_context; } /* @@ -1579,7 +1580,13 @@ void blk_update_root_state(BlockBackend *blk) */ void blk_apply_root_state(BlockBackend *blk, BlockDriverState *bs) { + AioContext *ctx = blk->root_state.aio_context; bs->detect_zeroes = blk->root_state.detect_zeroes; + if (ctx && ctx != qemu_get_aio_context()) { + aio_context_acquire(ctx); + bdrv_set_aio_context(bs, ctx); + aio_context_release(ctx); + } } /* diff --git a/include/block/block_int.h b/include/block/block_int.h index ef3c047..23c64d2 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -534,6 +534,7 @@ struct BlockBackendRootState { int open_flags; bool read_only; BlockdevDetectZeroesOptions detect_zeroes; + AioContext *aio_context; }; typedef enum BlockMirrorBackingMode { -- 2.7.4