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