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 <mprivozn@redhat.com>
This commit is contained in:
Michal Privoznik 2015-09-15 13:41:42 +02:00
parent 8fca346c97
commit cb2ed632e6
2 changed files with 37 additions and 0 deletions

View File

@ -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 bool
qemuDomainDiskBlockJobIsActive(virDomainDiskDefPtr disk) qemuDomainDiskBlockJobIsActive(virDomainDiskDefPtr disk)
{ {

View File

@ -411,6 +411,10 @@ int qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
bool force_probe, bool force_probe,
bool report_broken); bool report_broken);
bool qemuDomainDiskSourceDiffers(virConnectPtr conn,
virDomainDiskDefPtr disk,
virDomainDiskDefPtr origDisk);
int qemuDomainStorageFileInit(virQEMUDriverPtr driver, int qemuDomainStorageFileInit(virQEMUDriverPtr driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virStorageSourcePtr src); virStorageSourcePtr src);