[libvirt] [PATCH 2/2] qemu: block: Use correct alias when extracting disk node names
Peter Krempa
pkrempa at redhat.com
Mon Sep 25 09:53:07 UTC 2017
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
More information about the libvir-list
mailing list