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