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.