On Wed 23 Jan 2019 12:54:24 PM CET, Andrey Shinkevich wrote:
> +static BlockDriverState *insert_filter(BlockDriverState *bs, Error **errp)
> +{
> +    BlockDriverState *cor_filter_bs;
> +    Error *local_err = NULL;
> +
> +    cor_filter_bs = create_filter_node(bs, errp);
> +    if (cor_filter_bs == NULL) {
> +        error_prepend(errp, "Could not create filter node: ");
> +        return NULL;
> +    }
> +
> +    bdrv_set_aio_context(cor_filter_bs, bdrv_get_aio_context(bs));
> +
> +    bdrv_drained_begin(bs);
> +    bdrv_replace_node(bs, cor_filter_bs, &local_err);
> +    bdrv_drained_end(bs);

I think this was already discussed in the previous version of this
patch: if you insert a copy-on-read filter here then all guest reads
will copy the data from the backing chain, but you don't want to copy
anything below the 'base' node, so the copy-on-read filter needs a
'base' parameter.

Berto

Reply via email to