summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Krempa <pkrempa@redhat.com>2016-05-20 10:42:41 +0200
committerPeter Krempa <pkrempa@redhat.com>2016-05-25 16:59:58 +0200
commit62a73bf631381d3ca1ea6576f5c2da026a427574 (patch)
treeb1586144d08fe4ec711d045fd74b407358c74daf
parent6448356f27466e18daaaa3edb8e8884fccbf95d6 (diff)
downloadlibvirt-62a73bf631381d3ca1ea6576f5c2da026a427574.tar.gz
qemu: Refactor typed params assignment in qemuDomainGetBlockIoTune
Introduce a macro to assign the parameters to avoid the for loop and shuffle around various checks for a simpler and saner function.
-rw-r--r--src/qemu/qemu_driver.c145
1 files changed, 37 insertions, 108 deletions
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 2e6b166c58..4ec04eebb2 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -17795,8 +17795,7 @@ qemuDomainGetBlockIoTune(virDomainPtr dom,
virDomainBlockIoTuneInfo reply;
char *device = NULL;
int ret = -1;
- size_t i;
- bool supportMaxOptions = true;
+ int maxparams = QEMU_NB_BLOCK_IO_TUNE_PARAM_MAX;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
VIR_DOMAIN_AFFECT_CONFIG |
@@ -17829,16 +17828,21 @@ qemuDomainGetBlockIoTune(virDomainPtr dom,
"QEMU binary"));
goto endjob;
}
- supportMaxOptions = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DRIVE_IOTUNE_MAX);
+
+ if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DRIVE_IOTUNE_MAX))
+ maxparams = QEMU_NB_BLOCK_IO_TUNE_PARAM;
}
- if ((*nparams) == 0) {
- *nparams = supportMaxOptions ?
- QEMU_NB_BLOCK_IO_TUNE_PARAM_MAX : QEMU_NB_BLOCK_IO_TUNE_PARAM;
+ if (*nparams == 0) {
+ *nparams = maxparams;
ret = 0;
goto endjob;
+ } else if (*nparams < maxparams) {
+ maxparams = *nparams;
}
+ *nparams = 0;
+
if (def) {
if (!(disk = qemuDomainDiskByName(def, path)))
goto endjob;
@@ -17863,110 +17867,35 @@ qemuDomainGetBlockIoTune(virDomainPtr dom,
reply = disk->blkdeviotune;
}
- for (i = 0; i < QEMU_NB_BLOCK_IO_TUNE_PARAM_MAX && i < *nparams; i++) {
- virTypedParameterPtr param = &params[i];
+#define BLOCK_IOTUNE_ASSIGN(name, var) \
+ if (*nparams < maxparams && \
+ virTypedParameterAssign(&params[(*nparams)++], \
+ VIR_DOMAIN_BLOCK_IOTUNE_ ## name, \
+ VIR_TYPED_PARAM_ULLONG, \
+ reply.var) < 0) \
+ goto endjob
- switch (i) {
- case 0:
- if (virTypedParameterAssign(param,
- VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC,
- VIR_TYPED_PARAM_ULLONG,
- reply.total_bytes_sec) < 0)
- goto endjob;
- break;
- case 1:
- if (virTypedParameterAssign(param,
- VIR_DOMAIN_BLOCK_IOTUNE_READ_BYTES_SEC,
- VIR_TYPED_PARAM_ULLONG,
- reply.read_bytes_sec) < 0)
- goto endjob;
- break;
- case 2:
- if (virTypedParameterAssign(param,
- VIR_DOMAIN_BLOCK_IOTUNE_WRITE_BYTES_SEC,
- VIR_TYPED_PARAM_ULLONG,
- reply.write_bytes_sec) < 0)
- goto endjob;
- break;
- case 3:
- if (virTypedParameterAssign(param,
- VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_IOPS_SEC,
- VIR_TYPED_PARAM_ULLONG,
- reply.total_iops_sec) < 0)
- goto endjob;
- break;
- case 4:
- if (virTypedParameterAssign(param,
- VIR_DOMAIN_BLOCK_IOTUNE_READ_IOPS_SEC,
- VIR_TYPED_PARAM_ULLONG,
- reply.read_iops_sec) < 0)
- goto endjob;
- break;
- case 5:
- if (virTypedParameterAssign(param,
- VIR_DOMAIN_BLOCK_IOTUNE_WRITE_IOPS_SEC,
- VIR_TYPED_PARAM_ULLONG,
- reply.write_iops_sec) < 0)
- goto endjob;
- break;
- case 6:
- if (virTypedParameterAssign(param,
- VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC_MAX,
- VIR_TYPED_PARAM_ULLONG,
- reply.total_bytes_sec_max) < 0)
- goto endjob;
- break;
- case 7:
- if (virTypedParameterAssign(param,
- VIR_DOMAIN_BLOCK_IOTUNE_READ_BYTES_SEC_MAX,
- VIR_TYPED_PARAM_ULLONG,
- reply.read_bytes_sec_max) < 0)
- goto endjob;
- break;
- case 8:
- if (virTypedParameterAssign(param,
- VIR_DOMAIN_BLOCK_IOTUNE_WRITE_BYTES_SEC_MAX,
- VIR_TYPED_PARAM_ULLONG,
- reply.write_bytes_sec_max) < 0)
- goto endjob;
- break;
- case 9:
- if (virTypedParameterAssign(param,
- VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_IOPS_SEC_MAX,
- VIR_TYPED_PARAM_ULLONG,
- reply.total_iops_sec_max) < 0)
- goto endjob;
- break;
- case 10:
- if (virTypedParameterAssign(param,
- VIR_DOMAIN_BLOCK_IOTUNE_READ_IOPS_SEC_MAX,
- VIR_TYPED_PARAM_ULLONG,
- reply.read_iops_sec_max) < 0)
- goto endjob;
- break;
- case 11:
- if (virTypedParameterAssign(param,
- VIR_DOMAIN_BLOCK_IOTUNE_WRITE_IOPS_SEC_MAX,
- VIR_TYPED_PARAM_ULLONG,
- reply.write_iops_sec_max) < 0)
- goto endjob;
- break;
- case 12:
- if (virTypedParameterAssign(param,
- VIR_DOMAIN_BLOCK_IOTUNE_SIZE_IOPS_SEC,
- VIR_TYPED_PARAM_ULLONG,
- reply.size_iops_sec) < 0)
- goto endjob;
- /* coverity[dead_error_begin] */
- default:
- break;
- }
- }
- if (!supportMaxOptions && *nparams > QEMU_NB_BLOCK_IO_TUNE_PARAM)
- *nparams = QEMU_NB_BLOCK_IO_TUNE_PARAM;
- else if (*nparams > QEMU_NB_BLOCK_IO_TUNE_PARAM_MAX)
- *nparams = QEMU_NB_BLOCK_IO_TUNE_PARAM_MAX;
+ BLOCK_IOTUNE_ASSIGN(TOTAL_BYTES_SEC, total_bytes_sec);
+ BLOCK_IOTUNE_ASSIGN(READ_BYTES_SEC, read_bytes_sec);
+ BLOCK_IOTUNE_ASSIGN(WRITE_BYTES_SEC, write_bytes_sec);
+
+ BLOCK_IOTUNE_ASSIGN(TOTAL_IOPS_SEC, total_iops_sec);
+ BLOCK_IOTUNE_ASSIGN(READ_IOPS_SEC, read_iops_sec);
+ BLOCK_IOTUNE_ASSIGN(WRITE_IOPS_SEC, write_iops_sec);
+
+ BLOCK_IOTUNE_ASSIGN(TOTAL_BYTES_SEC_MAX, total_bytes_sec_max);
+ BLOCK_IOTUNE_ASSIGN(READ_BYTES_SEC_MAX, read_bytes_sec_max);
+ BLOCK_IOTUNE_ASSIGN(WRITE_BYTES_SEC_MAX, write_bytes_sec_max);
+
+ BLOCK_IOTUNE_ASSIGN(TOTAL_IOPS_SEC_MAX, total_iops_sec_max);
+ BLOCK_IOTUNE_ASSIGN(READ_IOPS_SEC_MAX, read_iops_sec_max);
+ BLOCK_IOTUNE_ASSIGN(WRITE_IOPS_SEC_MAX, write_iops_sec_max);
+
+ BLOCK_IOTUNE_ASSIGN(SIZE_IOPS_SEC, size_iops_sec);
+
+#undef BLOCK_IOTUNE_ASSIGN
+
ret = 0;
endjob: