From bb14d9897b33a87e8b6a2b60c62b473a4f05e7f3 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Mon, 23 Oct 2017 16:39:49 +0200 Subject: [PATCH] storage: Don't store leading '/' in image name when splitting out volume Libvirt historically stores storage source path including the volume as one string in the XML, but that is not really flexible enough when dealing with the fields in the code. Previously we'd store the slash separating the two as part of the image name. This was fine for gluster but it's not necessary and does not scale well when converting other protocols. Don't store the slash as part of the path. The resulting change from absolute to relative path within the gluster driver should be okay, as the root directory is the default when accessing gluster. --- src/conf/domain_conf.c | 4 ++-- src/qemu/qemu_block.c | 2 +- src/util/virstoragefile.c | 4 ++-- .../qemuxml2argv-disk-drive-network-gluster.args | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index aefc7a4f15..75b4b99dcf 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -8403,7 +8403,7 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node, src->volume = src->path; - if (VIR_STRDUP(src->path, tmp) < 0) + if (VIR_STRDUP(src->path, tmp + 1) < 0) goto cleanup; tmp[0] = '\0'; @@ -22167,7 +22167,7 @@ virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf, virStorageNetProtocolTypeToString(src->protocol)); if (src->volume) { - if (virAsprintf(&path, "%s%s", src->volume, src->path) < 0) + if (virAsprintf(&path, "%s/%s", src->volume, src->path) < 0) return -1; } diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c index 77e48bed83..408817dfc6 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c @@ -427,7 +427,7 @@ qemuBlockStorageSourceGetURI(virStorageSourcePtr src) if (src->path) { if (src->volume) { - if (virAsprintf(&uri->path, "/%s%s", + if (virAsprintf(&uri->path, "/%s/%s", src->volume, src->path) < 0) goto cleanup; } else { diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c index 3a2d2aa056..d48358abb0 100644 --- a/src/util/virstoragefile.c +++ b/src/util/virstoragefile.c @@ -2450,7 +2450,7 @@ virStorageSourceParseBackingURI(virStorageSourcePtr src, src->volume = src->path; - if (VIR_STRDUP(src->path, tmp) < 0) + if (VIR_STRDUP(src->path, tmp + 1) < 0) goto cleanup; tmp[0] = '\0'; @@ -2931,7 +2931,7 @@ virStorageSourceParseBackingJSONGluster(virStorageSourcePtr src, src->protocol = VIR_STORAGE_NET_PROTOCOL_GLUSTER; if (VIR_STRDUP(src->volume, volume) < 0 || - virAsprintf(&src->path, "/%s", path) < 0) + VIR_STRDUP(src->path, path) < 0) return -1; nservers = virJSONValueArraySize(server); diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-gluster.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-gluster.args index 9906169559..6cfbe36feb 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-gluster.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-gluster.args @@ -27,7 +27,7 @@ id=virtio-disk0 \ format=raw,if=none,id=drive-virtio-disk1' \ -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk1,\ id=virtio-disk1 \ --drive file.driver=gluster,file.volume=Volume3,file.path=/Image.qcow2,\ +-drive file.driver=gluster,file.volume=Volume3,file.path=Image.qcow2,\ file.server.0.type=tcp,file.server.0.host=example.org,file.server.0.port=6000,\ file.server.1.type=tcp,file.server.1.host=example.org,file.server.1.port=24007,\ file.server.2.type=unix,file.server.2.socket=/path/to/sock,file.debug=4,\ -- 2.39.5