]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu_conf.c: introduce qemuAddRemoveSharedHostdevInternal
authorDaniel Henrique Barboza <danielhb413@gmail.com>
Tue, 3 Sep 2019 23:06:05 +0000 (20:06 -0300)
committerPavel Hrdina <phrdina@redhat.com>
Mon, 9 Sep 2019 12:52:19 +0000 (14:52 +0200)
qemuAddSharedHostdev() has a code similar to
qemuRemoveSharedHostdev(), with exception of one line that
defines the operation (add or remove).

This patch introduces a new function that aggregates the common
code, using a flag to switch between the operations, avoiding
code repetition.

No functional change was made.

Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
src/qemu/qemu_conf.c

index bf9ab32a12aa34db909a6b637564115a6377ccc7..08672ac94f3bed26e9255bbcd08493d01327761c 100644 (file)
@@ -1730,9 +1730,34 @@ qemuGetHostdevPath(virDomainHostdevDefPtr hostdev)
 
 
 static int
-qemuAddSharedHostdev(virQEMUDriverPtr driver,
-                     virDomainHostdevDefPtr hostdev,
-                     const char *name)
+qemuSharedDeviceEntryRemove(virQEMUDriverPtr driver,
+                            const char *key,
+                            const char *name)
+{
+    qemuSharedDeviceEntryPtr entry = NULL;
+    int idx;
+
+    if (!(entry = virHashLookup(driver->sharedDevices, key)))
+        return -1;
+
+    /* Nothing to do if the shared disk is not recored in the table. */
+    if (!qemuSharedDeviceEntryDomainExists(entry, name, &idx))
+        return 0;
+
+    if (entry->ref != 1)
+        VIR_DELETE_ELEMENT(entry->domains, idx, entry->ref);
+    else
+        ignore_value(virHashRemoveEntry(driver->sharedDevices, key));
+
+    return 0;
+}
+
+
+static int
+qemuAddRemoveSharedHostdevInternal(virQEMUDriverPtr driver,
+                                   virDomainHostdevDefPtr hostdev,
+                                   const char *name,
+                                   bool addDevice)
 {
     char *dev_path = NULL;
     char *key = NULL;
@@ -1748,37 +1773,19 @@ qemuAddSharedHostdev(virQEMUDriverPtr driver,
         goto cleanup;
 
     qemuDriverLock(driver);
-    ret = qemuSharedDeviceEntryInsert(driver, key, name);
+
+    if (addDevice)
+        ret = qemuSharedDeviceEntryInsert(driver, key, name);
+    else
+        ret = qemuSharedDeviceEntryRemove(driver, key, name);
+
     qemuDriverUnlock(driver);
 
  cleanup:
     VIR_FREE(dev_path);
     VIR_FREE(key);
     return ret;
-}
-
-
-static int
-qemuSharedDeviceEntryRemove(virQEMUDriverPtr driver,
-                            const char *key,
-                            const char *name)
-{
-    qemuSharedDeviceEntryPtr entry = NULL;
-    int idx;
-
-    if (!(entry = virHashLookup(driver->sharedDevices, key)))
-        return -1;
-
-    /* Nothing to do if the shared disk is not recored in the table. */
-    if (!qemuSharedDeviceEntryDomainExists(entry, name, &idx))
-        return 0;
 
-    if (entry->ref != 1)
-        VIR_DELETE_ELEMENT(entry->domains, idx, entry->ref);
-    else
-        ignore_value(virHashRemoveEntry(driver->sharedDevices, key));
-
-    return 0;
 }
 
 
@@ -1803,7 +1810,8 @@ qemuAddSharedDevice(virQEMUDriverPtr driver,
     if (dev->type == VIR_DOMAIN_DEVICE_DISK)
         return qemuAddSharedDisk(driver, dev->data.disk, name);
     else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV)
-        return qemuAddSharedHostdev(driver, dev->data.hostdev, name);
+        return qemuAddRemoveSharedHostdevInternal(driver, dev->data.hostdev,
+                                                  name, true);
     else
         return 0;
 }
@@ -1838,33 +1846,6 @@ qemuRemoveSharedDisk(virQEMUDriverPtr driver,
 }
 
 
-static int
-qemuRemoveSharedHostdev(virQEMUDriverPtr driver,
-                        virDomainHostdevDefPtr hostdev,
-                        const char *name)
-{
-    char *dev_path = NULL;
-    char *key = NULL;
-    int ret = -1;
-
-    if (!qemuIsSharedHostdev(hostdev))
-        return 0;
-
-    if (!(dev_path = qemuGetHostdevPath(hostdev)))
-        goto cleanup;
-
-    if (!(key = qemuGetSharedDeviceKey(dev_path)))
-        goto cleanup;
-
-    qemuDriverLock(driver);
-    ret = qemuSharedDeviceEntryRemove(driver, key, name);
-    qemuDriverUnlock(driver);
-
- cleanup:
-    VIR_FREE(dev_path);
-    VIR_FREE(key);
-    return ret;
-}
 
 
 /* qemuRemoveSharedDevice:
@@ -1884,7 +1865,8 @@ qemuRemoveSharedDevice(virQEMUDriverPtr driver,
     if (dev->type == VIR_DOMAIN_DEVICE_DISK)
         return qemuRemoveSharedDisk(driver, dev->data.disk, name);
     else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV)
-        return qemuRemoveSharedHostdev(driver, dev->data.hostdev, name);
+        return qemuAddRemoveSharedHostdevInternal(driver, dev->data.hostdev,
+                                                  name, false);
     else
         return 0;
 }