mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
qemuDomainGetStatsBlock: Remove pre-blockdev code paths
This function and its callees were a bit more entangled so remove the pre-blockdev code separately. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Pavel Hrdina <phrdina@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
071a4c8ba7
commit
6b90c5a59b
@ -18172,42 +18172,6 @@ qemuDomainGetStatsOneBlockFallback(virQEMUDriver *driver,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* qemuDomainGetStatsOneBlockRefreshNamed:
|
||||
* @src: disk source structure
|
||||
* @alias: disk alias
|
||||
* @stats: hash table containing stats for all disks
|
||||
* @nodedata: reply containing 'query-named-block-nodes' data
|
||||
*
|
||||
* Refresh disk block stats data (qemuBlockStats *) which are present only
|
||||
* in the reply of 'query-named-block-nodes' in cases when the data was gathered
|
||||
* by using query-block originally.
|
||||
*/
|
||||
static void
|
||||
qemuDomainGetStatsOneBlockRefreshNamed(virStorageSource *src,
|
||||
const char *alias,
|
||||
GHashTable *stats,
|
||||
GHashTable *nodedata)
|
||||
{
|
||||
qemuBlockStats *entry;
|
||||
|
||||
virJSONValue *data;
|
||||
unsigned long long tmp;
|
||||
|
||||
if (!nodedata || !src->nodestorage)
|
||||
return;
|
||||
|
||||
if (!(entry = virHashLookup(stats, alias)))
|
||||
return;
|
||||
|
||||
if (!(data = virHashLookup(nodedata, src->nodestorage)))
|
||||
return;
|
||||
|
||||
if (virJSONValueObjectGetNumberUlong(data, "write_threshold", &tmp) == 0)
|
||||
entry->write_threshold = tmp;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
qemuDomainGetStatsOneBlock(virQEMUDriver *driver,
|
||||
virQEMUDriverConfig *cfg,
|
||||
@ -18330,20 +18294,15 @@ qemuDomainGetStatsBlockExportHeader(virDomainDiskDef *disk,
|
||||
static int
|
||||
qemuDomainGetStatsBlockExportDisk(virDomainDiskDef *disk,
|
||||
GHashTable *stats,
|
||||
GHashTable *nodestats,
|
||||
virTypedParamList *params,
|
||||
size_t *recordnr,
|
||||
bool visitBacking,
|
||||
virQEMUDriver *driver,
|
||||
virQEMUDriverConfig *cfg,
|
||||
virDomainObj *dom,
|
||||
bool blockdev)
|
||||
virDomainObj *dom)
|
||||
|
||||
{
|
||||
virStorageSource *n;
|
||||
const char *frontendalias;
|
||||
const char *backendalias;
|
||||
const char *backendstoragealias;
|
||||
|
||||
/*
|
||||
* This helps to keep logs clean from error messages on getting stats
|
||||
@ -18379,9 +18338,10 @@ qemuDomainGetStatsBlockExportDisk(virDomainDiskDef *disk,
|
||||
|
||||
for (n = disk->src; virStorageSourceIsBacking(n); n = n->backingStore) {
|
||||
g_autofree char *alias = NULL;
|
||||
const char *frontendalias;
|
||||
const char *backendalias;
|
||||
const char *backendstoragealias;
|
||||
|
||||
/* for 'sd' disks we won't be displaying stats for the backing chain
|
||||
* as we don't update the stats correctly */
|
||||
if (QEMU_DOMAIN_DISK_PRIVATE(disk)->qomName) {
|
||||
frontendalias = QEMU_DOMAIN_DISK_PRIVATE(disk)->qomName;
|
||||
backendalias = n->nodeformat;
|
||||
@ -18392,7 +18352,8 @@ qemuDomainGetStatsBlockExportDisk(virDomainDiskDef *disk,
|
||||
!(alias = qemuDomainStorageAlias(disk->info.alias, n->id)))
|
||||
return -1;
|
||||
|
||||
qemuDomainGetStatsOneBlockRefreshNamed(n, alias, stats, nodestats);
|
||||
/* for 'sd' disks we won't be displaying stats for the backing chain
|
||||
* as we don't update the stats correctly */
|
||||
|
||||
frontendalias = alias;
|
||||
backendalias = alias;
|
||||
@ -18428,7 +18389,7 @@ qemuDomainGetStatsBlockExportDisk(virDomainDiskDef *disk,
|
||||
/* in blockdev mode where we can properly and uniquely identify images we
|
||||
* can also report stats for the mirror target or the scratch image or target
|
||||
* of a backup operation */
|
||||
if (visitBacking && blockdev) {
|
||||
if (visitBacking) {
|
||||
qemuDomainObjPrivate *priv = dom->privateData;
|
||||
|
||||
if (disk->mirror &&
|
||||
@ -18498,13 +18459,8 @@ qemuDomainGetStatsBlock(virQEMUDriver *driver,
|
||||
size_t i;
|
||||
int rc;
|
||||
g_autoptr(GHashTable) stats = NULL;
|
||||
g_autoptr(GHashTable) nodestats = NULL;
|
||||
g_autoptr(virJSONValue) nodedata = NULL;
|
||||
qemuDomainObjPrivate *priv = dom->privateData;
|
||||
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||
bool blockdev = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV);
|
||||
bool fetchnodedata = virQEMUCapsGet(priv->qemuCaps,
|
||||
QEMU_CAPS_QUERY_NAMED_BLOCK_NODES) && !blockdev;
|
||||
int count_index = -1;
|
||||
size_t visited = 0;
|
||||
bool visitBacking = !!(privflags & QEMU_DOMAIN_STATS_BACKING);
|
||||
@ -18514,27 +18470,16 @@ qemuDomainGetStatsBlock(virQEMUDriver *driver,
|
||||
|
||||
rc = qemuMonitorGetAllBlockStatsInfo(priv->mon, &stats);
|
||||
|
||||
if (rc >= 0) {
|
||||
if (blockdev)
|
||||
if (rc >= 0)
|
||||
rc = qemuMonitorBlockStatsUpdateCapacityBlockdev(priv->mon, stats);
|
||||
else
|
||||
ignore_value(qemuMonitorBlockStatsUpdateCapacity(priv->mon, stats));
|
||||
}
|
||||
|
||||
if (fetchnodedata)
|
||||
nodedata = qemuMonitorQueryNamedBlockNodes(priv->mon);
|
||||
|
||||
qemuDomainObjExitMonitor(dom);
|
||||
|
||||
/* failure to retrieve stats is fine at this point */
|
||||
if (rc < 0 || (fetchnodedata && !nodedata))
|
||||
if (rc < 0)
|
||||
virResetLastError();
|
||||
}
|
||||
|
||||
if (nodedata &&
|
||||
!(nodestats = qemuBlockGetNodeData(nodedata)))
|
||||
return -1;
|
||||
|
||||
/* When listing backing chains, it's easier to fix up the count
|
||||
* after the iteration than it is to iterate twice; but we still
|
||||
* want count listed first. */
|
||||
@ -18543,10 +18488,9 @@ qemuDomainGetStatsBlock(virQEMUDriver *driver,
|
||||
return -1;
|
||||
|
||||
for (i = 0; i < dom->def->ndisks; i++) {
|
||||
if (qemuDomainGetStatsBlockExportDisk(dom->def->disks[i], stats, nodestats,
|
||||
if (qemuDomainGetStatsBlockExportDisk(dom->def->disks[i], stats,
|
||||
params, &visited,
|
||||
visitBacking, driver, cfg, dom,
|
||||
blockdev) < 0)
|
||||
visitBacking, driver, cfg, dom) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user