On Thu, Mar 05, 2020 at 13:50:56 +0100, Kevin Wolf wrote:
> This series allows libvirt to fix a regression that its switch from
> drive-mirror to blockdev-mirror caused: It currently requires that the
> backing chain of the target image is already available when the mirror
> operation is started.
>
> In reality, the backing chain may only be copied while the operation is
> in progress, so the backing file of the target image needs to stay
> disabled until the operation completes and should be attached only at
> that point. Without this series, we don't have a supported API to attach
> the backing file at that later point.
>
> Kevin Wolf (4):
> block: Make bdrv_get_cumulative_perm() public
> block: Relax restrictions for blockdev-snapshot
> iotests: Fix run_job() with use_log=False
> iotests: Test mirror with temporarily disabled target backing file
I've modified the libvirt code I have to try this. It works as expected
without iothreads, but I get the following error when iothread is used:
error: internal error: unable to execute QEMU command 'transaction': Cannot change iothread of active block backend
I've tested it also with your Aio context patches for blockdev-reopen
applied and also added a feature flag for blockdev-snapshot
https://gitlab.com/pipo.sk/qemu/-/commits/kevin-snapshot-blockcopy
I can post the feature patch if you want after I clean it up or perhaps
suggest a better name or wording for it.
The libvirt code is a subset of
https://www.redhat.com/archives/libvir-list/2020-February/msg01125.html
with the blockdev-reopen bits removed and replaced by blockdev-snapshot.
You can have a look at the libvirt impl here:
https://gitlab.com/pipo.sk/libvirt/-/commits/block-copy-reopen-snapshot
I'll post it for review if it's clear that iothreads can be supported
using this approach.