Changing the media doesn't change other (especially ABI based) aspects
of the disk. Add verification and reject disk change if ABI would be
changed.
---
src/conf/domain_conf.c | 2 +-
src/conf/domain_conf.h | 3 +++
src/libvirt_private.syms | 1 +
src/qemu/qemu_driver.c | 4 ++++
src/qemu/qemu_hotplug.c | 4 ++++
5 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 34c1a8c..126a489 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -13667,7 +13667,7 @@ virDomainDeviceInfoCheckABIStability(virDomainDeviceInfoPtr src,
}
-static bool
+bool
virDomainDiskDefCheckABIStability(virDomainDiskDefPtr src,
virDomainDiskDefPtr dst)
{
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 21cfba2..c59ad19 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2304,6 +2304,9 @@ virDomainDefPtr virDomainDefParseNode(xmlDocPtr doc,
bool virDomainDefCheckABIStability(virDomainDefPtr src,
virDomainDefPtr dst);
+bool virDomainDiskDefCheckABIStability(virDomainDiskDefPtr src,
+ virDomainDiskDefPtr dst);
+
int virDomainDefAddImplicitControllers(virDomainDefPtr def);
char *virDomainDefFormat(virDomainDefPtr def,
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 08111d4..e85467e 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -219,6 +219,7 @@ virDomainDiskBusTypeToString;
virDomainDiskCacheTypeFromString;
virDomainDiskCacheTypeToString;
virDomainDiskDefAssignAddress;
+virDomainDiskDefCheckABIStability;
virDomainDiskDefForeachPath;
virDomainDiskDefFree;
virDomainDiskDefNew;
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 4b1c69f..ad7cb84 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -6642,6 +6642,10 @@ qemuDomainChangeDiskMediaLive(virConnectPtr conn,
goto end;
}
+ /* when changing media, rest of the disk ABI cannot change */
+ if (!virDomainDiskDefCheckABIStability(orig_disk, disk))
+ goto end;
+
if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
goto end;
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index 4c69c5e..d937d44 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -795,6 +795,10 @@ qemuDomainAttachDeviceDiskLive(virConnectPtr conn,
goto end;
}
+ /* when changing media, rest of the disk ABI cannot change */
+ if (!virDomainDiskDefCheckABIStability(orig_disk, disk))
+ goto end;
+
if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
goto end;
--
2.0.2