[PATCH v2 10/14] domain_driver.c: add virDomainDriverParseBlkioDeviceStr()

Ján Tomko jtomko at redhat.com
Sun Feb 23 12:46:54 UTC 2020


On Mon, Feb 17, 2020 at 04:29:17PM -0500, Daniel Henrique Barboza wrote:
>lxcDomainParseBlkioDeviceStr() and qemuDomainParseBlkioDeviceStr()
>are the same function. Avoid code repetition by putting the code
>in a new helper.
>
>Signed-off-by: Daniel Henrique Barboza <danielhb413 at gmail.com>
>---
> po/POTFILES.in                 |   1 +
> src/hypervisor/domain_driver.c | 112 +++++++++++++++++++++++++++++
> src/hypervisor/domain_driver.h |   3 +
> src/libvirt_private.syms       |   1 +
> src/lxc/lxc_driver.c           | 122 +++----------------------------
> src/qemu/qemu_driver.c         | 126 +++------------------------------
> 6 files changed, 133 insertions(+), 232 deletions(-)
>
>diff --git a/po/POTFILES.in b/po/POTFILES.in
>index dba0d3a12e..aa5c1fb6c7 100644
>--- a/po/POTFILES.in
>+++ b/po/POTFILES.in
>@@ -78,6 +78,7 @@
> @SRCDIR@/src/hyperv/hyperv_driver.c
> @SRCDIR@/src/hyperv/hyperv_util.c
> @SRCDIR@/src/hyperv/hyperv_wmi.c
>+ at SRCDIR@/src/hypervisor/domain_driver.c
> @SRCDIR@/src/interface/interface_backend_netcf.c
> @SRCDIR@/src/interface/interface_backend_udev.c
> @SRCDIR@/src/internal.h

This belongs in the previous patch, it already introduced a
virReportError.

>diff --git a/src/hypervisor/domain_driver.c b/src/hypervisor/domain_driver.c
>index c999458c25..bbfadb3d9b 100644
>--- a/src/hypervisor/domain_driver.c
>+++ b/src/hypervisor/domain_driver.c
>@@ -22,6 +22,7 @@
>
> #include "domain_driver.h"
> #include "viralloc.h"
>+#include "virstring.h"
>
> #define VIR_FROM_THIS VIR_FROM_DOMAIN
>
>@@ -94,3 +95,114 @@ virDomainDriverMergeBlkioDevice(virBlkioDevicePtr *dest_array,
>
>     return 0;
> }
>+
>+
>+/* blkioDeviceStr in the form of /device/path,weight,/device/path,weight
>+ * for example, /dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0,800
>+ */
>+int
>+virDomainDriverParseBlkioDeviceStr(char *blkioDeviceStr, const char *type,
>+                                   virBlkioDevicePtr *dev, size_t *size)
>+{
>+    char *temp;
>+    int ndevices = 0;
>+    int nsep = 0;
>+    size_t i;
>+    virBlkioDevicePtr result = NULL;
>+
>+    *dev = NULL;
>+    *size = 0;
>+
>+    if (STREQ(blkioDeviceStr, ""))
>+        return 0;
>+
>+    temp = blkioDeviceStr;
>+    while (temp) {
>+        temp = strchr(temp, ',');
>+        if (temp) {
>+            temp++;
>+            nsep++;
>+        }
>+    }
>+
>+    /* A valid string must have even number of fields, hence an odd
>+     * number of commas.  */
>+    if (!(nsep & 1))
>+        goto parse_error;
>+
>+    ndevices = (nsep + 1) / 2;
>+
>+    if (VIR_ALLOC_N(result, ndevices) < 0)
>+        return -1;
>+
>+    i = 0;
>+    temp = blkioDeviceStr;
>+    while (temp) {
>+        char *p = temp;
>+
>+        /* device path */
>+        p = strchr(p, ',');
>+        if (!p)
>+            goto parse_error;
>+
>+        result[i].path = g_strndup(temp, p - temp);
>+
>+        /* value */
>+        temp = p + 1;
>+
>+        if (STREQ(type, VIR_DOMAIN_BLKIO_DEVICE_WEIGHT)) {
>+            if (virStrToLong_uip(temp, &p, 10, &result[i].weight) < 0)
>+                goto number_error;
>+        } else if (STREQ(type, VIR_DOMAIN_BLKIO_DEVICE_READ_IOPS)) {
>+            if (virStrToLong_uip(temp, &p, 10, &result[i].riops) < 0)
>+                goto number_error;
>+        } else if (STREQ(type, VIR_DOMAIN_BLKIO_DEVICE_WRITE_IOPS)) {
>+            if (virStrToLong_uip(temp, &p, 10, &result[i].wiops) < 0)
>+                goto number_error;
>+        } else if (STREQ(type, VIR_DOMAIN_BLKIO_DEVICE_READ_BPS)) {
>+            if (virStrToLong_ullp(temp, &p, 10, &result[i].rbps) < 0)
>+                goto number_error;
>+        } else if (STREQ(type, VIR_DOMAIN_BLKIO_DEVICE_WRITE_BPS)) {
>+            if (virStrToLong_ullp(temp, &p, 10, &result[i].wbps) < 0)
>+                goto number_error;
>+        } else {
>+            virReportError(VIR_ERR_INVALID_ARG,
>+                          _("unknown parameter '%s'"), type);

Indentation is off.

>+            goto cleanup;
>+        }
>+

Reviewed-by: Ján Tomko <jtomko at redhat.com>

Jano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20200223/3c02a9de/attachment-0001.sig>


More information about the libvir-list mailing list