From: Jiri Denemark Date: Thu, 20 Mar 2014 12:04:06 +0000 (+0100) Subject: Fix usage of virDomainDefCompatibleDevice X-Git-Tag: v1.2.3-rc1~95 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6dc75f565418a169d6b86e059bcce3d0082c8e3e;p=thirdparty%2Flibvirt.git 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 --- 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; }