]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Pass virQEMUDriverPtr into APIs managed shared disk list
authorDaniel P. Berrange <berrange@redhat.com>
Wed, 6 Feb 2013 14:18:34 +0000 (14:18 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Mon, 11 Feb 2013 12:48:22 +0000 (12:48 +0000)
Currently the APIs for managing the shared disk list take
a virHashTablePtr as the primary argument. This is bad
because it requires the caller to deal with locking of
the QEMU driver. Switch the APIs to take the full
virQEMUDriverPtr instance

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
src/qemu/qemu_conf.c
src/qemu/qemu_conf.h
src/qemu/qemu_driver.c
src/qemu/qemu_process.c
src/qemu/qemu_process.h

index 574d2cb4774ab561f4dce1b07085213bbcf0a160..2bd19311efa7527606b6a50e4c43f2bdd7958fb8 100644 (file)
@@ -825,65 +825,62 @@ qemuGetSharedDiskKey(const char *disk_path)
  * add a new entry.
  */
 int
-qemuAddSharedDisk(virHashTablePtr sharedDisks,
+qemuAddSharedDisk(virQEMUDriverPtr driver,
                   const char *disk_path)
 {
     size_t *ref = NULL;
     char *key = NULL;
+    int ret = -1;
 
     if (!(key = qemuGetSharedDiskKey(disk_path)))
-        return -1;
+        goto cleanup;
 
-    if ((ref = virHashLookup(sharedDisks, key))) {
-        if (virHashUpdateEntry(sharedDisks, key, ++ref) < 0) {
-             VIR_FREE(key);
-             return -1;
-        }
+    if ((ref = virHashLookup(driver->sharedDisks, key))) {
+        if (virHashUpdateEntry(driver->sharedDisks, key, ++ref) < 0)
+             goto cleanup;
     } else {
-        if (virHashAddEntry(sharedDisks, key, (void *)0x1)) {
-            VIR_FREE(key);
-            return -1;
-        }
+        if (virHashAddEntry(driver->sharedDisks, key, (void *)0x1))
+            goto cleanup;
     }
 
+    ret = 0;
+cleanup:
     VIR_FREE(key);
-    return 0;
+    return ret;
 }
 
 /* Decrease the ref count if the entry already exists, otherwise
  * remove the entry.
  */
 int
-qemuRemoveSharedDisk(virHashTablePtr sharedDisks,
+qemuRemoveSharedDisk(virQEMUDriverPtr driver,
                      const char *disk_path)
 {
     size_t *ref = NULL;
     char *key = NULL;
+    int ret = -1;
 
     if (!(key = qemuGetSharedDiskKey(disk_path)))
-        return -1;
+        goto cleanup;
 
-    if (!(ref = virHashLookup(sharedDisks, key))) {
-        VIR_FREE(key);
-        return -1;
-    }
+    if (!(ref = virHashLookup(driver->sharedDisks, key)))
+        goto cleanup;
 
     if (ref != (void *)0x1) {
-        if (virHashUpdateEntry(sharedDisks, key, --ref) < 0) {
-             VIR_FREE(key);
-             return -1;
-        }
+        if (virHashUpdateEntry(driver->sharedDisks, key, --ref) < 0)
+            goto cleanup;
     } else {
-        if (virHashRemoveEntry(sharedDisks, key) < 0) {
-            VIR_FREE(key);
-            return -1;
-        }
+        if (virHashRemoveEntry(driver->sharedDisks, key) < 0)
+            goto cleanup;
     }
 
+    ret = 0;
+cleanup:
     VIR_FREE(key);
-    return 0;
+    return ret;
 }
 
+
 int qemuDriverAllocateID(virQEMUDriverPtr driver)
 {
     return virAtomicIntInc(&driver->nextvmid);
index f0a3da181c58fd2ea3788fae8107b7415d37a68f..09eacce8c6bc9ac14d5ec589eee3295421d83527 100644 (file)
@@ -275,11 +275,11 @@ qemuDriverCloseCallback qemuDriverCloseCallbackGet(virQEMUDriverPtr driver,
 void qemuDriverCloseCallbackRunAll(virQEMUDriverPtr driver,
                                    virConnectPtr conn);
 
-int qemuAddSharedDisk(virHashTablePtr sharedDisks,
+int qemuAddSharedDisk(virQEMUDriverPtr driver,
                       const char *disk_path)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
 
-int qemuRemoveSharedDisk(virHashTablePtr sharedDisks,
+int qemuRemoveSharedDisk(virQEMUDriverPtr driver,
                          const char *disk_path)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
 char * qemuGetSharedDiskKey(const char *disk_path)
index 4e2700ca55e86fef943e989f79ddfa09a5d0987c..a4fc0c9dad703fab4794e55eaf992bb876bb00ad 100644 (file)
@@ -5827,7 +5827,7 @@ qemuDomainAttachDeviceDiskLive(virConnectPtr conn,
 
     if (disk->type == VIR_DOMAIN_DISK_TYPE_BLOCK &&
         disk->shared &&
-        (qemuCheckSharedDisk(driver->sharedDisks, disk) < 0))
+        (qemuCheckSharedDisk(driver, disk) < 0))
         goto end;
 
     if (qemuDomainDetermineDiskChain(driver, disk, false) < 0)
@@ -5883,7 +5883,7 @@ qemuDomainAttachDeviceDiskLive(virConnectPtr conn,
 
     if (ret == 0) {
         if (disk->type == VIR_DOMAIN_DISK_TYPE_BLOCK && disk->shared) {
-            if (qemuAddSharedDisk(driver->sharedDisks, disk->src) < 0)
+            if (qemuAddSharedDisk(driver, disk->src) < 0)
                 VIR_WARN("Failed to add disk '%s' to shared disk table",
                          disk->src);
         }
@@ -6010,7 +6010,7 @@ qemuDomainDetachDeviceDiskLive(virQEMUDriverPtr driver,
     if (ret == 0 &&
         disk->type == VIR_DOMAIN_DISK_TYPE_BLOCK &&
         disk->shared) {
-        if (qemuRemoveSharedDisk(driver->sharedDisks, disk->src) < 0)
+        if (qemuRemoveSharedDisk(driver, disk->src) < 0)
              VIR_WARN("Failed to remove disk '%s' from shared disk table",
                       disk->src);
     }
index abbee5e89016a1220c22cc3b0bf866f903950537..975933239aba730881a7977daa923a12c2383733 100644 (file)
@@ -3557,7 +3557,7 @@ qemuSetUnprivSGIO(virDomainDiskDefPtr disk)
  * Returns 0 if no conflicts, otherwise returns -1.
  */
 int
-qemuCheckSharedDisk(virHashTablePtr sharedDisks,
+qemuCheckSharedDisk(virQEMUDriverPtr driver,
                     virDomainDiskDefPtr disk)
 {
     int val;
@@ -3571,7 +3571,7 @@ qemuCheckSharedDisk(virHashTablePtr sharedDisks,
     /* It can't be conflict if no other domain is
      * is sharing it.
      */
-    if (!(ref = virHashLookup(sharedDisks, key)))
+    if (!(ref = virHashLookup(driver->sharedDisks, key)))
         goto cleanup;
 
     if (ref == (void *)0x1)
@@ -3953,10 +3953,10 @@ int qemuProcessStart(virConnectPtr conn,
 #endif
 
         if (disk->type == VIR_DOMAIN_DISK_TYPE_BLOCK && disk->shared) {
-            if (qemuAddSharedDisk(driver->sharedDisks, disk->src) < 0)
+            if (qemuAddSharedDisk(driver, disk->src) < 0)
                 goto cleanup;
 
-            if (qemuCheckSharedDisk(driver->sharedDisks, disk) < 0)
+            if (qemuCheckSharedDisk(driver, disk) < 0)
                 goto cleanup;
         }
 
@@ -4368,7 +4368,7 @@ void qemuProcessStop(virQEMUDriverPtr driver,
         virDomainDiskDefPtr disk = vm->def->disks[i];
 
         if (disk->type == VIR_DOMAIN_DISK_TYPE_BLOCK && disk->shared) {
-            ignore_value(qemuRemoveSharedDisk(driver->sharedDisks, disk->src));
+            ignore_value(qemuRemoveSharedDisk(driver, disk->src));
         }
     }
 
index 2dc804172137446f14545f64828b569166e3edbe..cbdab2491bb307e0d79e19443aa5343778f20c13 100644 (file)
@@ -100,7 +100,7 @@ virBitmapPtr qemuPrepareCpumap(virQEMUDriverPtr driver,
                                virBitmapPtr nodemask);
 int qemuSetUnprivSGIO(virDomainDiskDefPtr disk);
 
-int qemuCheckSharedDisk(virHashTablePtr sharedDisks,
+int qemuCheckSharedDisk(virQEMUDriverPtr driver,
                         virDomainDiskDefPtr disk);
 
 #endif /* __QEMU_PROCESS_H__ */