[libvirt PATCH v2 4/9] util: move virStorageFileGetLVMKey to locking

Pavel Hrdina phrdina at redhat.com
Wed Jan 6 12:25:55 UTC 2021


The function doesn't take virStorageSource as argument and has nothing
in common with virStorageSource or storage file.

Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
Reviewed-by: Peter Krempa <pkrempa at redhat.com>
---
 src/libvirt_private.syms        |  1 -
 src/locking/lock_driver_lockd.c | 68 ++++++++++++++++++++++++++++++++-
 src/util/virstoragefile.c       | 62 ------------------------------
 src/util/virstoragefile.h       |  2 -
 4 files changed, 67 insertions(+), 66 deletions(-)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index b8fedc82d5..78d4e5ab30 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -3135,7 +3135,6 @@ virStorageFileFeatureTypeToString;
 virStorageFileFormatTypeFromString;
 virStorageFileFormatTypeToString;
 virStorageFileGetBackingStoreStr;
-virStorageFileGetLVMKey;
 virStorageFileGetMetadata;
 virStorageFileGetMetadataFromBuf;
 virStorageFileGetMetadataFromFD;
diff --git a/src/locking/lock_driver_lockd.c b/src/locking/lock_driver_lockd.c
index 15d9e5f076..d459c1668c 100644
--- a/src/locking/lock_driver_lockd.c
+++ b/src/locking/lock_driver_lockd.c
@@ -24,6 +24,7 @@
 #include "lock_driver.h"
 #include "virconf.h"
 #include "viralloc.h"
+#include "vircommand.h"
 #include "vircrypto.h"
 #include "virlog.h"
 #include "viruuid.h"
@@ -455,6 +456,71 @@ static int virLockManagerLockDaemonNew(virLockManagerPtr lock,
 }
 
 
+#ifdef LVS
+static int
+virLockManagerGetLVMKey(const char *path,
+                        char **key)
+{
+    /*
+     *  # lvs --noheadings --unbuffered --nosuffix --options "uuid" LVNAME
+     *    06UgP5-2rhb-w3Bo-3mdR-WeoL-pytO-SAa2ky
+     */
+    int status;
+    int ret = -1;
+    g_autoptr(virCommand) cmd = NULL;
+
+    cmd = virCommandNewArgList(LVS, "--noheadings",
+                               "--unbuffered", "--nosuffix",
+                               "--options", "uuid", path,
+                               NULL
+                               );
+    *key = NULL;
+
+    /* Run the program and capture its output */
+    virCommandSetOutputBuffer(cmd, key);
+    if (virCommandRun(cmd, &status) < 0)
+        goto cleanup;
+
+    /* Explicitly check status == 0, rather than passing NULL
+     * to virCommandRun because we don't want to raise an actual
+     * error in this scenario, just return a NULL key.
+     */
+
+    if (status == 0 && *key) {
+        char *nl;
+        char *tmp = *key;
+
+        /* Find first non-space character */
+        while (*tmp && g_ascii_isspace(*tmp))
+            tmp++;
+        /* Kill leading spaces */
+        if (tmp != *key)
+            memmove(*key, tmp, strlen(tmp)+1);
+
+        /* Kill trailing newline */
+        if ((nl = strchr(*key, '\n')))
+            *nl = '\0';
+    }
+
+    ret = 0;
+
+ cleanup:
+    if (*key && STREQ(*key, ""))
+        VIR_FREE(*key);
+
+    return ret;
+}
+#else
+static int
+virLockManagerGetLVMKey(const char *path,
+                        char **key G_GNUC_UNUSED)
+{
+    virReportSystemError(ENOSYS, _("Unable to get LVM key for %s"), path);
+    return -1;
+}
+#endif
+
+
 static int virLockManagerLockDaemonAddResource(virLockManagerPtr lock,
                                                unsigned int type,
                                                const char *name,
@@ -494,7 +560,7 @@ static int virLockManagerLockDaemonAddResource(virLockManagerPtr lock,
         if (STRPREFIX(name, "/dev") &&
             driver->lvmLockSpaceDir) {
             VIR_DEBUG("Trying to find an LVM UUID for %s", name);
-            if (virStorageFileGetLVMKey(name, &newName) < 0)
+            if (virLockManagerGetLVMKey(name, &newName) < 0)
                 goto cleanup;
 
             if (newName) {
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index 119342d296..bc342cabe3 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -1251,68 +1251,6 @@ int virStorageFileIsClusterFS(const char *path)
                                  VIR_FILE_SHFS_CEPH);
 }
 
-#ifdef LVS
-int virStorageFileGetLVMKey(const char *path,
-                            char **key)
-{
-    /*
-     *  # lvs --noheadings --unbuffered --nosuffix --options "uuid" LVNAME
-     *    06UgP5-2rhb-w3Bo-3mdR-WeoL-pytO-SAa2ky
-     */
-    int status;
-    int ret = -1;
-    g_autoptr(virCommand) cmd = NULL;
-
-    cmd = virCommandNewArgList(LVS, "--noheadings",
-                               "--unbuffered", "--nosuffix",
-                               "--options", "uuid", path,
-                               NULL
-                               );
-    *key = NULL;
-
-    /* Run the program and capture its output */
-    virCommandSetOutputBuffer(cmd, key);
-    if (virCommandRun(cmd, &status) < 0)
-        goto cleanup;
-
-    /* Explicitly check status == 0, rather than passing NULL
-     * to virCommandRun because we don't want to raise an actual
-     * error in this scenario, just return a NULL key.
-     */
-
-    if (status == 0 && *key) {
-        char *nl;
-        char *tmp = *key;
-
-        /* Find first non-space character */
-        while (*tmp && g_ascii_isspace(*tmp))
-            tmp++;
-        /* Kill leading spaces */
-        if (tmp != *key)
-            memmove(*key, tmp, strlen(tmp)+1);
-
-        /* Kill trailing newline */
-        if ((nl = strchr(*key, '\n')))
-            *nl = '\0';
-    }
-
-    ret = 0;
-
- cleanup:
-    if (*key && STREQ(*key, ""))
-        VIR_FREE(*key);
-
-    return ret;
-}
-#else
-int virStorageFileGetLVMKey(const char *path,
-                            char **key G_GNUC_UNUSED)
-{
-    virReportSystemError(ENOSYS, _("Unable to get LVM key for %s"), path);
-    return -1;
-}
-#endif
-
 #ifdef WITH_UDEV
 /* virStorageFileGetSCSIKey
  * @path: Path to the SCSI device
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
index cc9bd4875f..31feb22f26 100644
--- a/src/util/virstoragefile.h
+++ b/src/util/virstoragefile.h
@@ -428,8 +428,6 @@ int virStorageFileIsClusterFS(const char *path);
 bool virStorageIsFile(const char *path);
 bool virStorageIsRelative(const char *backing);
 
-int virStorageFileGetLVMKey(const char *path,
-                            char **key);
 int virStorageFileGetSCSIKey(const char *path,
                              char **key,
                              bool ignoreError);
-- 
2.29.2




More information about the libvir-list mailing list