[libvirt] [PATCH 3/5] qemu: Split qemuDomainDetachDeviceLiveAndConfig

Michal Privoznik mprivozn at redhat.com
Mon May 21 16:08:00 UTC 2018


The aim is to have qemuDomainDetachDeviceLiveAndConfig() accept
virDomainDeviceDefPtr. Therefore, new
qemuDomainDetachDeviceXMLLiveAndConfig() which is a drop in
replacement for the former.

Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
---
 src/qemu/qemu_driver.c | 46 ++++++++++++++++++++++++++++++++++++----------
 1 file changed, 36 insertions(+), 10 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 3a328e5d46..0e0c0ce53e 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -8661,15 +8661,16 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom,
     return ret;
 }
 
+
 static int
 qemuDomainDetachDeviceLiveAndConfig(virQEMUDriverPtr driver,
                                     virDomainObjPtr vm,
-                                    const char *xml,
+                                    virDomainDeviceDefPtr dev,
                                     unsigned int flags)
 {
     virCapsPtr caps = NULL;
     virQEMUDriverConfigPtr cfg = NULL;
-    virDomainDeviceDefPtr dev = NULL, dev_copy = NULL;
+    virDomainDeviceDefPtr dev_copy = dev;
     unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE;
     virDomainDefPtr vmdef = NULL;
     int ret = -1;
@@ -8686,12 +8687,6 @@ qemuDomainDetachDeviceLiveAndConfig(virQEMUDriverPtr driver,
         !(flags & VIR_DOMAIN_AFFECT_LIVE))
         parse_flags |= VIR_DOMAIN_DEF_PARSE_INACTIVE;
 
-    dev = dev_copy = virDomainDeviceDefParse(xml, vm->def,
-                                             caps, driver->xmlopt,
-                                             parse_flags);
-    if (dev == NULL)
-        goto cleanup;
-
     if (flags & VIR_DOMAIN_AFFECT_CONFIG &&
         flags & VIR_DOMAIN_AFFECT_LIVE) {
         /* If we are affecting both CONFIG and LIVE
@@ -8743,11 +8738,42 @@ qemuDomainDetachDeviceLiveAndConfig(virQEMUDriverPtr driver,
     virObjectUnref(cfg);
     if (dev != dev_copy)
         virDomainDeviceDefFree(dev_copy);
-    virDomainDeviceDefFree(dev);
     virDomainDefFree(vmdef);
     return ret;
 }
 
+
+static int
+qemuDomainDetachDeviceXMLLiveAndConfig(virQEMUDriverPtr driver,
+                                       virDomainObjPtr vm,
+                                       const char *xml,
+                                       unsigned int flags)
+{
+    virCapsPtr caps = NULL;
+    virDomainDeviceDefPtr dev = NULL;
+    unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE;
+    int ret = -1;
+
+    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
+        goto cleanup;
+
+    if ((flags & VIR_DOMAIN_AFFECT_CONFIG) &&
+        !(flags & VIR_DOMAIN_AFFECT_LIVE))
+        parse_flags |= VIR_DOMAIN_DEF_PARSE_INACTIVE;
+
+    if (!(dev = virDomainDeviceDefParse(xml, vm->def,
+                                        caps, driver->xmlopt,
+                                        parse_flags)))
+        goto cleanup;
+
+    ret = qemuDomainDetachDeviceLiveAndConfig(driver, vm, dev, flags);
+ cleanup:
+    virDomainDeviceDefFree(dev);
+    virObjectUnref(caps);
+    return ret;
+}
+
+
 static int
 qemuDomainDetachDeviceFlags(virDomainPtr dom,
                             const char *xml,
@@ -8769,7 +8795,7 @@ qemuDomainDetachDeviceFlags(virDomainPtr dom,
     if (virDomainObjUpdateModificationImpact(vm, &flags) < 0)
         goto endjob;
 
-    if (qemuDomainDetachDeviceLiveAndConfig(driver, vm, xml, flags) < 0)
+    if (qemuDomainDetachDeviceXMLLiveAndConfig(driver, vm, xml, flags) < 0)
         goto endjob;
 
     ret = 0;
-- 
2.16.1




More information about the libvir-list mailing list