]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Fix value of 'device' argument for blockdev-mirror
authorPeter Krempa <pkrempa@redhat.com>
Mon, 20 Jan 2020 12:19:43 +0000 (13:19 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 24 Jan 2020 12:40:36 +0000 (13:40 +0100)
When using blockdev configurations the 'device' argument of
'blockdev-mirror' must correspond to the topmost node in the block node
graph. Libvirt didn't do this properly in case when 'copy_on_read'
option was enabled on the disk.

Use qemuDomainDiskGetTopNodename to fix it for the blockdev-mirror calls
in qemuDomainBlockCopy and the non-shared-storage migration.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
src/qemu/qemu_driver.c
src/qemu/qemu_migration.c

index 3218dc0e23cb8347f955231f932a013fe6938ebf..9e2a94306c256195228437869daa1e82281dc3d7 100644 (file)
@@ -18386,7 +18386,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm,
 
     if (blockdev) {
         ret = qemuMonitorBlockdevMirror(priv->mon, job->name, true,
-                                        disk->src->nodeformat,
+                                        qemuDomainDiskGetTopNodename(disk),
                                         mirror->nodeformat, bandwidth,
                                         granularity, buf_size, mirror_shallow);
     } else {
index 29d228a8d9345ec8e2853571444614008a95e914..d7814208a2eec136ae5097474d12349fd269be69 100644 (file)
@@ -931,7 +931,7 @@ qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr driver,
 
     if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV)) {
         jobname = diskAlias;
-        sourcename = disk->src->nodeformat;
+        sourcename = qemuDomainDiskGetTopNodename(disk);
         persistjob = true;
     } else {
         jobname = NULL;