[PATCH 2/2] qemu: block: Use correct alias when extracting disk node names

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



For some arcane reason we don't use the alias from disk->info.alias
directly but prepend drive in front of it. This messed up the disk node
name extraction code as qemu reports the full alias. This was broken in
the node name detector refactoring done in commit 0175dc6ea024d

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1494327
---
 src/qemu/qemu_block.c | 27 +++++++++++++++++++--------
 1 file changed, 19 insertions(+), 8 deletions(-)

diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
index a3da80f88..6faecb0ae 100644
--- a/src/qemu/qemu_block.c
+++ b/src/qemu/qemu_block.c
@@ -20,6 +20,7 @@

 #include "qemu_block.h"
 #include "qemu_domain.h"
+#include "qemu_alias.h"

 #include "viralloc.h"
 #include "virstring.h"
@@ -271,36 +272,46 @@ qemuBlockDiskDetectNodes(virDomainDiskDefPtr disk,
 {
     qemuBlockNodeNameBackingChainDataPtr entry = NULL;
     virStorageSourcePtr src = disk->src;
+    char *alias = NULL;
+    int ret = -1;

     /* don't attempt the detection if the top level already has node names */
     if (src->nodeformat || src->nodestorage)
         return 0;

-    if (!(entry = virHashLookup(disktable, disk->info.alias)))
-        return 0;
+    if (!(alias = qemuAliasFromDisk(disk)))
+        goto cleanup;
+
+    if (!(entry = virHashLookup(disktable, alias))) {
+        ret = 0;
+        goto cleanup;
+    }

     while (src && entry) {
         if (src->nodeformat || src->nodestorage) {
             if (STRNEQ_NULLABLE(src->nodeformat, entry->nodeformat) ||
                 STRNEQ_NULLABLE(src->nodestorage, entry->nodestorage))
-                goto error;
+                goto cleanup;

             break;
         } else {
             if (VIR_STRDUP(src->nodeformat, entry->nodeformat) < 0 ||
                 VIR_STRDUP(src->nodestorage, entry->nodestorage) < 0)
-                goto error;
+                goto cleanup;
         }

         entry = entry->backing;
         src = src->backingStore;
     }

-    return 0;
+    ret = 0;

- error:
-    qemuBlockDiskClearDetectedNodes(disk);
-    return -1;
+ cleanup:
+    VIR_FREE(alias);
+    if (ret < 0)
+        qemuBlockDiskClearDetectedNodes(disk);
+
+    return ret;
 }


-- 
2.14.1

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]
  Powered by Linux