[PATCH v2 12/14] domain_driver.c: add virDomainDriverSetupPersistentDefBlkioParams()

Daniel Henrique Barboza danielhb413 at gmail.com
Mon Feb 17 21:29:19 UTC 2020


This new helper avoids more code repetition inside
lxcDomainSetBlkioParameters() and qemuDomainSetBlkioParameters().

Signed-off-by: Daniel Henrique Barboza <danielhb413 at 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 = &params[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 = &params[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 = &params[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





More information about the libvir-list mailing list