[libvirt] [PATCH 1/3] conf: Display <physical> in output of voldef

John Ferlan jferlan at redhat.com
Tue Dec 13 21:07:05 UTC 2016

Although the virStorageBackendUpdateVolTargetInfo will update the
target.physical value, there is no way to provide that information
via the virStorageGetVolInfo API since it only returns the capacity
and allocation of a volume. So as described in commit id '0282ca45',
it should be possible to generate an output only <physical> value
for that purpose.

This patch generates the <physical> value in the volume XML output
for the sole purpose of being able to view/see the value to allow
someone to parse the XML in order to obtain the value.

Update the documentation to describe the output only nature.

Signed-off-by: John Ferlan <jferlan at redhat.com>
 docs/formatstorage.html.in | 5 +++++
 src/conf/storage_conf.c    | 6 ++++++
 2 files changed, 11 insertions(+)

diff --git a/docs/formatstorage.html.in b/docs/formatstorage.html.in
index 47c8b0c..a7273ed 100644
--- a/docs/formatstorage.html.in
+++ b/docs/formatstorage.html.in
@@ -550,6 +550,11 @@
         specified with the same semantics as for <code>allocation</code>
         This is compulsory when creating a volume.
         <span class="since">Since 0.4.1</span></dd>
+      <dt><code>physical</code></dt>
+      <dd>This output only element provides the host physical size of
+        the target storage volume. The default output <code>unit</code>
+        will be in bytes.
+        <span class="since">Since 3.0.0</span></dd>
       <dd>Provides information about the underlying storage allocation
         of the volume. This may not be available for some pool types.
diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index 7e7bb72..71ea0c9 100644
--- a/src/conf/storage_conf.c
+++ b/src/conf/storage_conf.c
@@ -1669,6 +1669,12 @@ virStorageVolDefFormat(virStoragePoolDefPtr pool,
     virBufferAsprintf(&buf, "<allocation unit='bytes'>%llu</allocation>\n",
+    /* NB: Display only - since virStorageVolInfo is limited to just
+     * 'capacity' and 'allocation' on output. Since we don't read this
+     * in, be sure it was filled in before printing */
+    if (def->target.physical)
+        virBufferAsprintf(&buf, "<physical unit='bytes'>%llu</physical>\n",
+                          def->target.physical);
     if (virStorageVolTargetDefFormat(options, &buf,
                                      &def->target, "target") < 0)

More information about the libvir-list mailing list