Re: [libvirt] [PATCHv2 50/62] qemu: driver: Don't pass 'virDomainDiskDefPtr' to qemuDomainGetStatsOneBlock

2018-08-16 Thread Ján Tomko

On Mon, Aug 13, 2018 at 06:00:24PM +0200, Peter Krempa wrote:

Allow reuse of qemuDomainGetStatsOneBlock to work with nodenames by
removing the code that looks up the stats data to the caller.

Signed-off-by: Peter Krempa 
---
src/qemu/qemu_driver.c | 24 +++-
1 file changed, 15 insertions(+), 9 deletions(-)



Reviewed-by: Ján Tomko 

Jano


signature.asc
Description: Digital signature
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCHv2 50/62] qemu: driver: Don't pass 'virDomainDiskDefPtr' to qemuDomainGetStatsOneBlock

2018-08-13 Thread Peter Krempa
Allow reuse of qemuDomainGetStatsOneBlock to work with nodenames by
removing the code that looks up the stats data to the caller.

Signed-off-by: Peter Krempa 
---
 src/qemu/qemu_driver.c | 24 +++-
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index e18187b7bb..63ce68bd35 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -20061,7 +20061,8 @@ qemuDomainGetStatsOneBlock(virQEMUDriverPtr driver,
virDomainObjPtr dom,
virDomainStatsRecordPtr record,
int *maxparams,
-   virDomainDiskDefPtr disk,
+   const char *diskdst,
+   const char *entryname,
virStorageSourcePtr src,
size_t block_idx,
virHashTablePtr stats,
@@ -20069,13 +20070,9 @@ qemuDomainGetStatsOneBlock(virQEMUDriverPtr driver,
 {
 qemuBlockStats *entry;
 int ret = -1;
-char *alias = NULL;

-if (disk->info.alias)
-alias = qemuDomainStorageAlias(disk->info.alias, src->id);
+QEMU_ADD_NAME_PARAM(record, maxparams, "block", "name", block_idx, 
diskdst);

-QEMU_ADD_NAME_PARAM(record, maxparams, "block", "name", block_idx,
-disk->dst);
 if (virStorageSourceIsLocalStorage(src) && src->path)
 QEMU_ADD_NAME_PARAM(record, maxparams, "block", "path",
 block_idx, src->path);
@@ -20094,7 +20091,7 @@ qemuDomainGetStatsOneBlock(virQEMUDriverPtr driver,
 /* In case where qemu didn't provide the stats we stop here rather than
  * trying to refresh the stats from the disk. Inability to provide stats is
  * usually caused by blocked storage so this would make libvirtd hang */
-if (!stats || !alias || !(entry = virHashLookup(stats, alias))) {
+if (!stats || !entryname || !(entry = virHashLookup(stats, entryname))) {
 ret = 0;
 goto cleanup;
 }
@@ -20140,7 +20137,6 @@ qemuDomainGetStatsOneBlock(virQEMUDriverPtr driver,

 ret = 0;
  cleanup:
-VIR_FREE(alias);
 return ret;
 }

@@ -20165,6 +20161,7 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver,
 int count_index = -1;
 size_t visited = 0;
 bool visitBacking = !!(privflags & QEMU_DOMAIN_STATS_BACKING);
+char *alias = NULL;

 if (HAVE_JOB(privflags) && virDomainObjIsActive(dom)) {
 qemuDomainObjEnterMonitor(driver, dom);
@@ -20201,10 +20198,18 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver,

 while (virStorageSourceIsBacking(src) &&
(src == disk->src || visitBacking)) {
+
+/* alias may be NULL if the VM is not running */
+if (disk->info.alias &&
+!(alias = qemuDomainStorageAlias(disk->info.alias, src->id)))
+goto cleanup;
+
 if (qemuDomainGetStatsOneBlock(driver, cfg, dom, record, maxparams,
-   disk, src, visited,
+   disk->dst, alias, src, visited,
stats, nodestats) < 0)
 goto cleanup;
+
+VIR_FREE(alias);
 visited++;
 src = src->backingStore;
 }
@@ -20214,6 +20219,7 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver,
 ret = 0;

  cleanup:
+VIR_FREE(alias);
 virHashFree(stats);
 virHashFree(nodestats);
 virJSONValueFree(nodedata);
-- 
2.16.2

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list