On 04/04/2017 08:20 AM, Peter Krempa wrote:
For native gluster pools the <dir> field denotes a directory inside the pool. For the actual pool name the <name> field has to be used. --- src/storage/storage_util.c | 16 ++++++++++++++-- tests/virstorageutildata/gluster-parse-basic-native.xml | 3 ++- .../virstorageutildata/gluster-parse-multivol-native.xml | 9 ++++++--- 3 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c index 1e44a2da4..7cc125a38 100644 --- a/src/storage/storage_util.c +++ b/src/storage/storage_util.c @@ -2846,6 +2846,7 @@ virStorageUtilGlusterExtractPoolSources(const char *host, xmlXPathContextPtr ctxt = NULL; xmlNodePtr *nodes = NULL; virStoragePoolSource *src = NULL; + char *volname; size_t i; int nnodes; int ret = -1; @@ -2862,14 +2863,25 @@ virStorageUtilGlusterExtractPoolSources(const char *host, if (!(src = virStoragePoolSourceListNewSource(list))) goto cleanup;
- if (!(src->dir = virXPathString("string(./name)", ctxt))) { + if (!(volname = virXPathString("string(./name)", ctxt))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("failed to extract gluster volume name")); goto cleanup; }
- if (pooltype == VIR_STORAGE_POOL_NETFS) + if (pooltype == VIR_STORAGE_POOL_NETFS) { src->format = VIR_STORAGE_POOL_NETFS_GLUSTERFS; + src->dir = volname; + } else if (pooltype == VIR_STORAGE_POOL_GLUSTER) { + src->name = volname; + + if (VIR_STRDUP(src->dir, "/") < 0) + goto cleanup; + } else { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("unsupported gluster lookup")); + goto cleanup;
Coverity gleefully tells me volname is leaked this morning... John
+ }
if (VIR_ALLOC_N(src->hosts, 1) < 0) goto cleanup; [...]