}
static int
-vzDomainBlockStats(virDomainPtr domain, const char *path,
- virDomainBlockStatsPtr stats)
+vzDomainBlockStatsImpl(virDomainObjPtr dom,
+ const char *path,
+ virDomainBlockStatsPtr stats)
{
- virDomainObjPtr dom = NULL;
- vzDomObjPtr privdom;
- int ret = -1;
+ vzDomObjPtr privdom = dom->privateData;
size_t i;
int idx;
- if (!(dom = vzDomObjFromDomainRef(domain)))
- return -1;
-
- privdom = dom->privateData;
-
if (*path) {
if ((idx = virDomainDiskIndexByName(dom->def, path, false)) < 0) {
virReportError(VIR_ERR_INVALID_ARG, _("invalid path: %s"), path);
- goto cleanup;
+ return -1;
}
if (prlsdkGetBlockStats(privdom->stats, dom->def->disks[idx], stats) < 0)
- goto cleanup;
+ return -1;
} else {
virDomainBlockStatsStruct s;
for (i = 0; i < dom->def->ndisks; i++) {
if (prlsdkGetBlockStats(privdom->stats, dom->def->disks[i], &s) < 0)
- goto cleanup;
+ return -1;
#define PARALLELS_SUM_STATS(VAR, TYPE, NAME) \
if (s.VAR != -1) \
}
}
stats->errs = -1;
+ return 0;
+}
+
+static int
+vzDomainBlockStats(virDomainPtr domain,
+ const char *path,
+ virDomainBlockStatsPtr stats)
+{
+ virDomainObjPtr dom;
+ int ret = -1;
+
+ if (!(dom = vzDomObjFromDomainRef(domain)))
+ return -1;
+
+ if (vzDomainBlockStatsImpl(dom, path, stats) < 0)
+ goto cleanup;
+
ret = 0;
cleanup:
unsigned int flags)
{
virDomainBlockStatsStruct stats;
+ virDomainObjPtr dom;
int ret = -1;
size_t i;
/* We don't return strings, and thus trivially support this flag. */
flags &= ~VIR_TYPED_PARAM_STRING_OKAY;
- if (vzDomainBlockStats(domain, path, &stats) < 0)
+ if (!(dom = vzDomObjFromDomainRef(domain)))
+ return -1;
+
+ if (vzDomainBlockStatsImpl(dom, path, &stats) < 0)
goto cleanup;
if (*nparams == 0) {
ret = 0;
cleanup:
+ virDomainObjEndAPI(&dom);
+
return ret;
}