[libvirt] [PATCH 4/5] storage: Create helper for virStorageBackendLogicalFindPoolSources

John Ferlan jferlan at redhat.com
Mon Dec 7 20:47:57 UTC 2015


Rework virStorageBackendLogicalFindPoolSources a bit to create a
helper virStorageBackendLogicalGetPoolSources that will make the
pvs call in order to generate a list of associated pv_name and vg_name's.

A future patch will make use of this for start/check processing to
ensure the storage pool source definition matches expectations.

Signed-off-by: John Ferlan <jferlan at redhat.com>
---
 src/storage/storage_backend_logical.c | 52 ++++++++++++++++++++++++-----------
 1 file changed, 36 insertions(+), 16 deletions(-)

diff --git a/src/storage/storage_backend_logical.c b/src/storage/storage_backend_logical.c
index 536e617..53ba983 100644
--- a/src/storage/storage_backend_logical.c
+++ b/src/storage/storage_backend_logical.c
@@ -414,10 +414,16 @@ virStorageBackendLogicalFindPoolSourcesFunc(char **const groups,
     return -1;
 }
 
-static char *
-virStorageBackendLogicalFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSED,
-                                        const char *srcSpec ATTRIBUTE_UNUSED,
-                                        unsigned int flags)
+/*
+ * @sourceList: Pointer to a storage pool source list
+ *
+ * Use the pvs command to fill the list of pv_name and vg_name associated
+ * into the passed sourceList.
+ *
+ * Returns 0 if successful, -1 and sets error on failure
+ */
+static int
+virStorageBackendLogicalGetPoolSources(virStoragePoolSourceListPtr sourceList)
 {
     /*
      * # pvs --noheadings -o pv_name,vg_name
@@ -431,11 +437,7 @@ virStorageBackendLogicalFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSED,
         2
     };
     virCommandPtr cmd;
-    char *retval = NULL;
-    virStoragePoolSourceList sourceList;
-    size_t i;
-
-    virCheckFlags(0, NULL);
+    int ret = -1;
 
     /*
      * NOTE: ignoring errors here; this is just to "touch" any logical volumes
@@ -447,20 +449,38 @@ virStorageBackendLogicalFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSED,
         VIR_WARN("Failure when running vgscan to refresh physical volumes");
     virCommandFree(cmd);
 
-    memset(&sourceList, 0, sizeof(sourceList));
-    sourceList.type = VIR_STORAGE_POOL_LOGICAL;
-
     cmd = virCommandNewArgList(PVS,
                                "--noheadings",
                                "-o", "pv_name,vg_name",
                                NULL);
     if (virCommandRunRegex(cmd, 1, regexes, vars,
                            virStorageBackendLogicalFindPoolSourcesFunc,
-                           &sourceList, "pvs") < 0) {
-        virCommandFree(cmd);
-        return NULL;
-    }
+                           sourceList, "pvs") < 0)
+        goto cleanup;
+    ret = 0;
+
+ cleanup:
     virCommandFree(cmd);
+    return ret;
+}
+
+
+static char *
+virStorageBackendLogicalFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSED,
+                                        const char *srcSpec ATTRIBUTE_UNUSED,
+                                        unsigned int flags)
+{
+    virStoragePoolSourceList sourceList;
+    size_t i;
+    char *retval = NULL;
+
+    virCheckFlags(0, NULL);
+
+    memset(&sourceList, 0, sizeof(sourceList));
+    sourceList.type = VIR_STORAGE_POOL_LOGICAL;
+
+    if (virStorageBackendLogicalGetPoolSources(&sourceList) < 0)
+        goto cleanup;
 
     retval = virStoragePoolSourceListFormat(&sourceList);
     if (retval == NULL) {
-- 
2.5.0




More information about the libvir-list mailing list