qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-block] [PATCH] block-backend: Preserve AioContext of root acro


From: Max Reitz
Subject: Re: [Qemu-block] [PATCH] block-backend: Preserve AioContext of root across medium change
Date: Fri, 23 Sep 2016 17:54:25 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0

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: address@hidden
> Signed-off-by: Fam Zheng <address@hidden>
> ---
>  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 {

The issue with using the BBRS is that it won't work with
x-blockdev-{insert,remove}-medium. Instead, I think the AioContext
should just be stored in the BB, for which Stefan sent an RFC back in April:

http://lists.nongnu.org/archive/html/qemu-devel/2016-04/msg01844.html

Max

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]