[libvirt] [PATCH 03/12] storage: Don't store leading '/' in image name when splitting out volume

Peter Krempa pkrempa at redhat.com
Fri Nov 3 14:29:20 UTC 2017


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 ++--
 tests/qemuxml2argvdata/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 77c20c697..01cd3811c 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -8398,7 +8398,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';
@@ -22158,7 +22158,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 018d7c7ec..08020d797 100644
--- a/src/qemu/qemu_block.c
+++ b/src/qemu/qemu_block.c
@@ -426,7 +426,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 3a2d2aa05..d48358abb 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 990616955..6cfbe36fe 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.14.3




More information about the libvir-list mailing list