[libvirt] [PATCH v2 4/7] dumpxml: let blockinfo reuse virStorageSource

Adam Litke alitke at redhat.com
Tue Nov 18 15:00:16 UTC 2014


On 18/11/14 06:31 -0700, Eric Blake wrote:
>In a future patch, the implementation of VIR_DOMAIN_XML_BLOCK_INFO
>will use information stored in virStorageSource.  In order to
>maximize code reuse, it is easiest if BlockInfo code also uses the
>same location for information.
>
>* src/util/virstoragefile.h (_virStorageSource): Add physical, to
>mirror virDomainBlockInfo.
>* src/qemu/qemu_driver.c (qemuDomainGetBlockInfo): Store into
>storage source, then copy to block info.
>
>Signed-off-by: Eric Blake <eblake at redhat.com>
>---
> src/qemu/qemu_driver.c    | 22 ++++++++++++++--------
> src/util/virstoragefile.h |  3 ++-
> 2 files changed, 16 insertions(+), 9 deletions(-)
>
>diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
>index cd70fde..aa24658 100644
>--- a/src/qemu/qemu_driver.c
>+++ b/src/qemu/qemu_driver.c
>@@ -11046,15 +11046,15 @@ qemuDomainGetBlockInfo(virDomainPtr dom,
>     /* Get info for normal formats */
>     if (S_ISREG(sb.st_mode) || fd == -1) {
> #ifndef WIN32
>-        info->physical = (unsigned long long)sb.st_blocks *
>+        disk->src->physical = (unsigned long long)sb.st_blocks *
>             (unsigned long long)DEV_BSIZE;
> #else
>-        info->physical = sb.st_size;
>+        disk->src->physical = sb.st_size;
> #endif
>         /* Regular files may be sparse, so logical size (capacity) is not same
>          * as actual physical above
>          */
>-        info->capacity = sb.st_size;
>+        disk->src->capacity = sb.st_size;
>     } else {
>         /* NB. Because we configure with AC_SYS_LARGEFILE, off_t should
>          * be 64 bits on all platforms.
>@@ -11065,17 +11065,17 @@ qemuDomainGetBlockInfo(virDomainPtr dom,
>                                  _("failed to seek to end of %s"), path);
>             goto endjob;
>         }
>-        info->physical = end;
>-        info->capacity = end;
>+        disk->src->physical = end;
>+        disk->src->capacity = end;
>     }
>
>     /* If the file we probed has a capacity set, then override
>      * what we calculated from file/block extents */
>     if (meta->capacity)
>-        info->capacity = meta->capacity;
>+        disk->src->capacity = meta->capacity;
>
>     /* Set default value .. */
>-    info->allocation = info->physical;
>+    disk->src->allocation = disk->src->physical;
>
>     /* ..but if guest is not using raw disk format and on a block device,
>      * then query highest allocated extent from QEMU
>@@ -11097,13 +11097,19 @@ qemuDomainGetBlockInfo(virDomainPtr dom,
>         qemuDomainObjEnterMonitor(driver, vm);
>         ret = qemuMonitorGetBlockExtent(priv->mon,
>                                         disk->info.alias,
>-                                        &info->allocation);
>+                                        &disk->src->allocation);
>         qemuDomainObjExitMonitor(driver, vm);
>
>     } else {
>         ret = 0;
>     }
>
>+    if (ret == 0) {
>+        info->capacity = disk->src->capacity;
>+        info->allocation = disk->src->allocation;
>+        info->physical = disk->src->physical;
>+    }
>+
>  endjob:
>     if (!qemuDomainObjEndJob(driver, vm))
>         vm = NULL;
>diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
>index 2583e10..681e50a 100644
>--- a/src/util/virstoragefile.h
>+++ b/src/util/virstoragefile.h
>@@ -252,8 +252,9 @@ struct _virStorageSource {
>
>     virStoragePermsPtr perms;
>     virStorageTimestampsPtr timestamps;
>-    unsigned long long allocation; /* in bytes, 0 if unknown */
>     unsigned long long capacity; /* in bytes, 0 if unknown */
>+    unsigned long long allocation; /* in bytes, 0 if unknown */

(Pedantic and superficial) allocation dropped and re-added.  Maybe you
prefer it to appear after capacity in light of physical now being
present?

>+    unsigned long long physical; /* in bytes, 0 if unknown */
>     size_t nseclabels;
>     virSecurityDeviceLabelDefPtr *seclabels;
>
>-- 
>1.9.3
>

-- 
Adam Litke




More information about the libvir-list mailing list