From 6dc75f565418a169d6b86e059bcce3d0082c8e3e Mon Sep 17 00:00:00 2001 From: Jiri Denemark Date: Thu, 20 Mar 2014 13:04:06 +0100 Subject: [PATCH] Fix usage of virDomainDefCompatibleDevice A device needs to be checked for compatibility with the domain definition it corresponds to. Specifically, for VIR_DOMAIN_AFFECT_CONFIG case we should check against persistent def rather than active def. Signed-off-by: Jiri Denemark --- src/lxc/lxc_driver.c | 20 +++++++++++--------- src/qemu/qemu_driver.c | 20 +++++++++++--------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 3104bf9e68..bc65815d7b 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -5025,13 +5025,14 @@ static int lxcDomainAttachDeviceFlags(virDomainPtr dom, } if (flags & VIR_DOMAIN_AFFECT_CONFIG) { - if (virDomainDefCompatibleDevice(vm->def, dev) < 0) - goto cleanup; - /* Make a copy for updated domain. */ vmdef = virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt); if (!vmdef) goto cleanup; + + if (virDomainDefCompatibleDevice(vmdef, dev) < 0) + goto cleanup; + if ((ret = lxcDomainAttachDeviceConfig(vmdef, dev)) < 0) goto cleanup; } @@ -5151,13 +5152,14 @@ static int lxcDomainUpdateDeviceFlags(virDomainPtr dom, } if (flags & VIR_DOMAIN_AFFECT_CONFIG) { - if (virDomainDefCompatibleDevice(vm->def, dev) < 0) - goto cleanup; - /* Make a copy for updated domain. */ vmdef = virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt); if (!vmdef) goto cleanup; + + if (virDomainDefCompatibleDevice(vmdef, dev) < 0) + goto cleanup; + if ((ret = lxcDomainUpdateDeviceConfig(vmdef, dev)) < 0) goto cleanup; } @@ -5261,14 +5263,14 @@ static int lxcDomainDetachDeviceFlags(virDomainPtr dom, } if (flags & VIR_DOMAIN_AFFECT_CONFIG) { - if (virDomainDefCompatibleDevice(vm->def, dev) < 0) - goto cleanup; - /* Make a copy for updated domain. */ vmdef = virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt); if (!vmdef) goto cleanup; + if (virDomainDefCompatibleDevice(vmdef, dev) < 0) + goto cleanup; + if ((ret = lxcDomainDetachDeviceConfig(vmdef, dev)) < 0) goto cleanup; } diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index fdc3549775..1d90a20675 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -6972,13 +6972,14 @@ static int qemuDomainAttachDeviceFlags(virDomainPtr dom, const char *xml, goto cleanup; if (flags & VIR_DOMAIN_AFFECT_CONFIG) { - if (virDomainDefCompatibleDevice(vm->def, dev) < 0) - goto endjob; - /* Make a copy for updated domain. */ vmdef = virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt); if (!vmdef) goto endjob; + + if (virDomainDefCompatibleDevice(vmdef, dev) < 0) + goto endjob; + if ((ret = qemuDomainAttachDeviceConfig(qemuCaps, vmdef, dev)) < 0) goto endjob; } @@ -7115,14 +7116,14 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom, goto cleanup; if (flags & VIR_DOMAIN_AFFECT_CONFIG) { - if (virDomainDefCompatibleDevice(vm->def, dev) < 0) - goto endjob; - /* Make a copy for updated domain. */ vmdef = virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt); if (!vmdef) goto endjob; + if (virDomainDefCompatibleDevice(vmdef, dev) < 0) + goto endjob; + if ((ret = qemuDomainUpdateDeviceConfig(qemuCaps, vmdef, dev)) < 0) goto endjob; } @@ -7254,13 +7255,14 @@ static int qemuDomainDetachDeviceFlags(virDomainPtr dom, const char *xml, goto cleanup; if (flags & VIR_DOMAIN_AFFECT_CONFIG) { - if (virDomainDefCompatibleDevice(vm->def, dev) < 0) - goto endjob; - /* Make a copy for updated domain. */ vmdef = virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt); if (!vmdef) goto endjob; + + if (virDomainDefCompatibleDevice(vmdef, dev) < 0) + goto endjob; + if ((ret = qemuDomainDetachDeviceConfig(vmdef, dev)) < 0) goto endjob; } -- GitLab