This new helper avoids more code repetition inside
lxcDomainSetBlkioParameters() and qemuDomainSetBlkioParameters().
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
---
src/hypervisor/domain_driver.c | 44 ++++++++++++++++++++++++++++++++++
src/hypervisor/domain_driver.h | 4 ++++
src/libvirt_private.syms | 1 +
src/lxc/lxc_driver.c | 33 +++----------------------
src/qemu/qemu_driver.c | 33 +++----------------------
5 files changed, 55 insertions(+), 60 deletions(-)
diff --git a/src/hypervisor/domain_driver.c b/src/hypervisor/domain_driver.c
index bbfadb3d9b..0cf6c7604b 100644
--- a/src/hypervisor/domain_driver.c
+++ b/src/hypervisor/domain_driver.c
@@ -206,3 +206,47 @@ virDomainDriverParseBlkioDeviceStr(char *blkioDeviceStr, const char *type,
}
return -1;
}
+
+
+int
+virDomainDriverSetupPersistentDefBlkioParams(virDomainDefPtr persistentDef,
+ virTypedParameterPtr params,
+ int nparams)
+{
+ size_t i;
+ int ret = 0;
+
+ for (i = 0; i < nparams; i++) {
+ virTypedParameterPtr param = ¶ms[i];
+
+ if (STREQ(param->field, VIR_DOMAIN_BLKIO_WEIGHT)) {
+ persistentDef->blkio.weight = param->value.ui;
+ } else if (STREQ(param->field, VIR_DOMAIN_BLKIO_DEVICE_WEIGHT) ||
+ STREQ(param->field, VIR_DOMAIN_BLKIO_DEVICE_READ_IOPS) ||
+ STREQ(param->field, VIR_DOMAIN_BLKIO_DEVICE_WRITE_IOPS) ||
+ STREQ(param->field, VIR_DOMAIN_BLKIO_DEVICE_READ_BPS) ||
+ STREQ(param->field, VIR_DOMAIN_BLKIO_DEVICE_WRITE_BPS)) {
+ virBlkioDevicePtr devices = NULL;
+ size_t ndevices;
+
+ if (virDomainDriverParseBlkioDeviceStr(param->value.s,
+ param->field,
+ &devices,
+ &ndevices) < 0) {
+ ret = -1;
+ continue;
+ }
+
+ if (virDomainDriverMergeBlkioDevice(&persistentDef->blkio.devices,
+ &persistentDef->blkio.ndevices,
+ devices, ndevices,
+ param->field) < 0)
+ ret = -1;
+
+ virBlkioDeviceArrayClear(devices, ndevices);
+ g_free(devices);
+ }
+ }
+
+ return ret;
+}
diff --git a/src/hypervisor/domain_driver.h b/src/hypervisor/domain_driver.h
index b78401ea42..b6d5e66bba 100644
--- a/src/hypervisor/domain_driver.h
+++ b/src/hypervisor/domain_driver.h
@@ -30,3 +30,7 @@ int virDomainDriverMergeBlkioDevice(virBlkioDevicePtr *dest_array,
int virDomainDriverParseBlkioDeviceStr(char *blkioDeviceStr, const char *type,
virBlkioDevicePtr *dev, size_t *size);
+
+int virDomainDriverSetupPersistentDefBlkioParams(virDomainDefPtr persistentDef,
+ virTypedParameterPtr params,
+ int nparams);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index a01a0223f3..c157012707 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1398,6 +1398,7 @@ virDomainCgroupSetupMemtune;
# hypervisor/domain_cgroup.h
virDomainDriverMergeBlkioDevice;
virDomainDriverParseBlkioDeviceStr;
+virDomainDriverSetupPersistentDefBlkioParams;
# libvirt_internal.h
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index c93dee37f8..0332b7668a 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -2314,7 +2314,6 @@ lxcDomainSetBlkioParameters(virDomainPtr dom,
unsigned int flags)
{
virLXCDriverPtr driver = dom->conn->privateData;
- size_t i;
virDomainObjPtr vm = NULL;
virDomainDefPtr def = NULL;
virDomainDefPtr persistentDef = NULL;
@@ -2371,35 +2370,9 @@ lxcDomainSetBlkioParameters(virDomainPtr dom,
if (ret < 0)
goto endjob;
if (persistentDef) {
- for (i = 0; i < nparams; i++) {
- virTypedParameterPtr param = ¶ms[i];
-
- if (STREQ(param->field, VIR_DOMAIN_BLKIO_WEIGHT)) {
- persistentDef->blkio.weight = params[i].value.ui;
- } else if (STREQ(param->field, VIR_DOMAIN_BLKIO_DEVICE_WEIGHT) ||
- STREQ(param->field, VIR_DOMAIN_BLKIO_DEVICE_READ_IOPS) ||
- STREQ(param->field, VIR_DOMAIN_BLKIO_DEVICE_WRITE_IOPS) ||
- STREQ(param->field, VIR_DOMAIN_BLKIO_DEVICE_READ_BPS) ||
- STREQ(param->field, VIR_DOMAIN_BLKIO_DEVICE_WRITE_BPS)) {
- virBlkioDevicePtr devices = NULL;
- size_t ndevices;
-
- if (virDomainDriverParseBlkioDeviceStr(params[i].value.s,
- param->field,
- &devices,
- &ndevices) < 0) {
- ret = -1;
- continue;
- }
- if (virDomainDriverMergeBlkioDevice(&persistentDef->blkio.devices,
- &persistentDef->blkio.ndevices,
- devices, ndevices,
- param->field) < 0)
- ret = -1;
- virBlkioDeviceArrayClear(devices, ndevices);
- VIR_FREE(devices);
- }
- }
+ ret = virDomainDriverSetupPersistentDefBlkioParams(persistentDef,
+ params,
+ nparams);
if (virDomainDefSave(persistentDef, driver->xmlopt, cfg->configDir) < 0)
ret = -1;
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 850d6699ce..44145a5f60 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -9319,7 +9319,6 @@ qemuDomainSetBlkioParameters(virDomainPtr dom,
unsigned int flags)
{
virQEMUDriverPtr driver = dom->conn->privateData;
- size_t i;
virDomainObjPtr vm = NULL;
virDomainDefPtr def;
virDomainDefPtr persistentDef;
@@ -9385,35 +9384,9 @@ qemuDomainSetBlkioParameters(virDomainPtr dom,
if (ret < 0)
goto endjob;
if (persistentDef) {
- for (i = 0; i < nparams; i++) {
- virTypedParameterPtr param = ¶ms[i];
-
- if (STREQ(param->field, VIR_DOMAIN_BLKIO_WEIGHT)) {
- persistentDef->blkio.weight = param->value.ui;
- } else if (STREQ(param->field, VIR_DOMAIN_BLKIO_DEVICE_WEIGHT) ||
- STREQ(param->field, VIR_DOMAIN_BLKIO_DEVICE_READ_IOPS) ||
- STREQ(param->field, VIR_DOMAIN_BLKIO_DEVICE_WRITE_IOPS) ||
- STREQ(param->field, VIR_DOMAIN_BLKIO_DEVICE_READ_BPS) ||
- STREQ(param->field, VIR_DOMAIN_BLKIO_DEVICE_WRITE_BPS)) {
- virBlkioDevicePtr devices = NULL;
- size_t ndevices;
-
- if (virDomainDriverParseBlkioDeviceStr(param->value.s,
- param->field,
- &devices,
- &ndevices) < 0) {
- ret = -1;
- continue;
- }
- if (virDomainDriverMergeBlkioDevice(&persistentDef->blkio.devices,
- &persistentDef->blkio.ndevices,
- devices, ndevices,
- param->field) < 0)
- ret = -1;
- virBlkioDeviceArrayClear(devices, ndevices);
- VIR_FREE(devices);
- }
- }
+ ret = virDomainDriverSetupPersistentDefBlkioParams(persistentDef,
+ params,
+ nparams);
if (virDomainDefSave(persistentDef, driver->xmlopt, cfg->configDir) < 0)
ret = -1;
--
2.24.1