Remove unneeded target path duplication, which could carelessly dereference NULL. Make it clear where 'key' is actually filled in. --- src/storage_backend_disk.c | 33 +++++++++++++++++++-------------- 1 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/storage_backend_disk.c b/src/storage_backend_disk.c index 1eb3eac..e50825b 100644 --- a/src/storage_backend_disk.c +++ b/src/storage_backend_disk.c @@ -226,10 +226,18 @@ virStorageBackendDiskMakeVol(virConnectPtr conn, if (STREQ(groups[2], "metadata") || STREQ(groups[2], "data")) { virStorageVolDefPtr vol = data; - /* We're searching for a specific vol only, so ignore others */ - if (vol && - STRNEQ(vol->name, groups[0])) - return 0; + + if (vol) { + /* We're searching for a specific vol only */ + if (vol->key) { + if (STRNEQ(vol->key, groups[0])) + return 0; + } else if (virStorageVolDefFindByKey(pool, groups[0]) != NULL) { + /* If no key, the volume must be newly created. If groups[0] + * isn't already a volume, assume it's the path we want */ + return 0; + } + } return virStorageBackendDiskMakeDataVol(conn, pool, groups, vol); } else if (STREQ(groups[2], "free")) { @@ -553,15 +561,9 @@ virStorageBackendDiskCreateVol(virConnectPtr conn, return -1; } - if (vol->key == NULL) { - /* XXX base off a unique key of the underlying disk */ - if ((vol->key = strdup(vol->target.path)) == NULL) { - virReportOOMError(conn); - return -1; - } - } - - if(virStorageBackendDiskPartBoundries(conn, pool, &startOffset, &endOffset, vol->allocation) != 0) { + if (virStorageBackendDiskPartBoundries(conn, pool, &startOffset, + &endOffset, + vol->allocation) != 0) { return -1; } @@ -580,7 +582,10 @@ virStorageBackendDiskCreateVol(virConnectPtr conn, VIR_FREE(pool->def->source.devices[0].freeExtents); pool->def->source.devices[0].nfreeExtent = 0; - /* Fetch actual extent info */ + /* Specifying a target path is meaningless */ + VIR_FREE(vol->target.path); + + /* Fetch actual extent info, generate key */ if (virStorageBackendDiskReadPartitions(conn, pool, vol) < 0) return -1; -- 1.6.0.6 -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list