On 23/09/2016 12:58, Fam Zheng wrote: > 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 { >
Looks good. I look forward to when we can drop bdrv_set_aio_context altogether... It's only 70 patches away! :) Paolo