1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

qemu: driver: Don't pass 'virDomainDiskDefPtr' to qemuDomainGetStatsOneBlock

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 <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2018-06-29 14:47:42 +02:00
parent d593814a9d
commit a656a19c02

View File

@ -20059,7 +20059,8 @@ qemuDomainGetStatsOneBlock(virQEMUDriverPtr driver,
virDomainObjPtr dom, virDomainObjPtr dom,
virDomainStatsRecordPtr record, virDomainStatsRecordPtr record,
int *maxparams, int *maxparams,
virDomainDiskDefPtr disk, const char *diskdst,
const char *entryname,
virStorageSourcePtr src, virStorageSourcePtr src,
size_t block_idx, size_t block_idx,
virHashTablePtr stats, virHashTablePtr stats,
@ -20067,13 +20068,9 @@ qemuDomainGetStatsOneBlock(virQEMUDriverPtr driver,
{ {
qemuBlockStats *entry; qemuBlockStats *entry;
int ret = -1; int ret = -1;
char *alias = NULL;
if (disk->info.alias) QEMU_ADD_NAME_PARAM(record, maxparams, "block", "name", block_idx, diskdst);
alias = qemuDomainStorageAlias(disk->info.alias, src->id);
QEMU_ADD_NAME_PARAM(record, maxparams, "block", "name", block_idx,
disk->dst);
if (virStorageSourceIsLocalStorage(src) && src->path) if (virStorageSourceIsLocalStorage(src) && src->path)
QEMU_ADD_NAME_PARAM(record, maxparams, "block", "path", QEMU_ADD_NAME_PARAM(record, maxparams, "block", "path",
block_idx, src->path); block_idx, src->path);
@ -20092,7 +20089,7 @@ qemuDomainGetStatsOneBlock(virQEMUDriverPtr driver,
/* In case where qemu didn't provide the stats we stop here rather than /* 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 * trying to refresh the stats from the disk. Inability to provide stats is
* usually caused by blocked storage so this would make libvirtd hang */ * 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; ret = 0;
goto cleanup; goto cleanup;
} }
@ -20138,7 +20135,6 @@ qemuDomainGetStatsOneBlock(virQEMUDriverPtr driver,
ret = 0; ret = 0;
cleanup: cleanup:
VIR_FREE(alias);
return ret; return ret;
} }
@ -20163,6 +20159,7 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver,
int count_index = -1; int count_index = -1;
size_t visited = 0; size_t visited = 0;
bool visitBacking = !!(privflags & QEMU_DOMAIN_STATS_BACKING); bool visitBacking = !!(privflags & QEMU_DOMAIN_STATS_BACKING);
char *alias = NULL;
if (HAVE_JOB(privflags) && virDomainObjIsActive(dom)) { if (HAVE_JOB(privflags) && virDomainObjIsActive(dom)) {
qemuDomainObjEnterMonitor(driver, dom); qemuDomainObjEnterMonitor(driver, dom);
@ -20199,10 +20196,18 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver,
while (virStorageSourceIsBacking(src) && while (virStorageSourceIsBacking(src) &&
(src == disk->src || visitBacking)) { (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, if (qemuDomainGetStatsOneBlock(driver, cfg, dom, record, maxparams,
disk, src, visited, disk->dst, alias, src, visited,
stats, nodestats) < 0) stats, nodestats) < 0)
goto cleanup; goto cleanup;
VIR_FREE(alias);
visited++; visited++;
src = src->backingStore; src = src->backingStore;
} }
@ -20212,6 +20217,7 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver,
ret = 0; ret = 0;
cleanup: cleanup:
VIR_FREE(alias);
virHashFree(stats); virHashFree(stats);
virHashFree(nodestats); virHashFree(nodestats);
virJSONValueFree(nodedata); virJSONValueFree(nodedata);