From cb2ed632e6c5b67e06722c79849cce05cb079950 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Tue, 15 Sep 2015 13:41:42 +0200 Subject: [PATCH] qemu_domain: Introduce qemuDomainDiskSourceDiffers This new private API should return true iff sources of two disks differs in sense that qemu should be instructed to change the disk backend. For instance, ejecting a CDROM is such case, or pointing disk into a different ISO location, and so on. Signed-off-by: Michal Privoznik --- src/qemu/qemu_domain.c | 33 +++++++++++++++++++++++++++++++++ src/qemu/qemu_domain.h | 4 ++++ 2 files changed, 37 insertions(+) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 0ef09b2e88..bfea18b009 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -3001,6 +3001,39 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr driver, } +bool +qemuDomainDiskSourceDiffers(virConnectPtr conn, + virDomainDiskDefPtr disk, + virDomainDiskDefPtr origDisk) +{ + char *diskSrc = NULL, *origDiskSrc = NULL; + bool diskEmpty, origDiskEmpty; + bool ret = true; + + diskEmpty = virStorageSourceIsEmpty(disk->src); + origDiskEmpty = virStorageSourceIsEmpty(origDisk->src); + + if (diskEmpty && origDiskEmpty) + return false; + + if (diskEmpty ^ origDiskEmpty) + return true; + + if (qemuGetDriveSourceString(disk->src, conn, &diskSrc) < 0 || + qemuGetDriveSourceString(origDisk->src, conn, &origDiskSrc) < 0) + goto cleanup; + + /* So far in qemu disk sources are considered different + * if either path to disk or its format changes. */ + ret = virDomainDiskGetFormat(disk) != virDomainDiskGetFormat(origDisk) || + STRNEQ_NULLABLE(diskSrc, origDiskSrc); + cleanup: + VIR_FREE(diskSrc); + VIR_FREE(origDiskSrc); + return ret; +} + + bool qemuDomainDiskBlockJobIsActive(virDomainDiskDefPtr disk) { diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 91eaea174b..0b9fd1c14c 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -411,6 +411,10 @@ int qemuDomainDetermineDiskChain(virQEMUDriverPtr driver, bool force_probe, bool report_broken); +bool qemuDomainDiskSourceDiffers(virConnectPtr conn, + virDomainDiskDefPtr disk, + virDomainDiskDefPtr origDisk); + int qemuDomainStorageFileInit(virQEMUDriverPtr driver, virDomainObjPtr vm, virStorageSourcePtr src); -- 2.39.5