From: Peter Krempa Date: Wed, 23 Feb 2022 13:04:47 +0000 (+0100) Subject: qemu: block copy: Propagate 'detect_zeroes' properly into mirror definition X-Git-Tag: v8.2.0-rc1~235 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c4b49e8714504aacd911208f91b112cd63a1d9b;p=thirdparty%2Flibvirt.git qemu: block copy: Propagate 'detect_zeroes' properly into mirror definition 'qemuDomainPrepareDiskSourceData' propagates 'detect_zeroes' only for the disk source image, but the mirror destination has the ambition to replace the disk source when the job is finished, so we need to propagate the 'detect_zeroes' setting also in that case. Unfortunately it would become very hairy to either set 'disk->mirror' sooner or propagate that we want this done into 'qemuDomainPrepareDiskSourceData', so the most straightforward solution is to do the propagation inside 'qemuDomainBlockCopyCommon'. Closes: https://gitlab.com/libvirt/libvirt/-/issues/277 Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index b74b0375a7..d4517ba22d 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -14976,6 +14976,14 @@ qemuDomainBlockCopyCommon(virDomainObj *vm, if (qemuDomainPrepareStorageSourceBlockdev(disk, n, priv, cfg) < 0) goto endjob; } + + /* 'qemuDomainPrepareStorageSourceBlockdev' calls + * 'qemuDomainPrepareDiskSourceData' which propagates 'detect_zeroes' + * into the topmost virStorage source of the disk chain. + * Since 'mirror' has the ambition to replace it we need to propagate + * it into the mirror too. We do it directly as otherwise we'd need + * to modify all callers of 'qemuDomainPrepareStorageSourceBlockdev' */ + mirror->detect_zeroes = disk->detect_zeroes; } /* If reusing an external image that includes a backing file but the user