[libvirt] [PATCH 03/10] conf: disk: Remove one unnecessary level of indentation

Peter Krempa pkrempa at redhat.com
Tue Apr 12 13:55:37 UTC 2016


Also simplify the code by switching to a for loop.
---
 src/conf/domain_conf.c | 737 ++++++++++++++++++++++++-------------------------
 1 file changed, 368 insertions(+), 369 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index aa96bac..f359e95 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -6755,423 +6755,422 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
     rawio = virXMLPropString(node, "rawio");
     sgio = virXMLPropString(node, "sgio");

-    cur = node->children;
-    while (cur != NULL) {
-        if (cur->type == XML_ELEMENT_NODE) {
-            if (!source && xmlStrEqual(cur->name, BAD_CAST "source")) {
-                sourceNode = cur;
+    for (cur = node->children; cur != NULL; cur = cur->next) {
+        if (cur->type != XML_ELEMENT_NODE)
+            continue;

-                if (virDomainDiskSourceParse(cur, ctxt, def->src) < 0)
-                    goto error;
+        if (!source && xmlStrEqual(cur->name, BAD_CAST "source")) {
+            sourceNode = cur;

-                source = true;
+            if (virDomainDiskSourceParse(cur, ctxt, def->src) < 0)
+                goto error;

-                if (def->src->type == VIR_STORAGE_TYPE_NETWORK) {
-                    if (def->src->protocol == VIR_STORAGE_NET_PROTOCOL_ISCSI)
-                        expected_secret_usage = VIR_SECRET_USAGE_TYPE_ISCSI;
-                    else if (def->src->protocol == VIR_STORAGE_NET_PROTOCOL_RBD)
-                        expected_secret_usage = VIR_SECRET_USAGE_TYPE_CEPH;
-                }
+            source = true;

-                startupPolicy = virXMLPropString(cur, "startupPolicy");
+            if (def->src->type == VIR_STORAGE_TYPE_NETWORK) {
+                if (def->src->protocol == VIR_STORAGE_NET_PROTOCOL_ISCSI)
+                    expected_secret_usage = VIR_SECRET_USAGE_TYPE_ISCSI;
+                else if (def->src->protocol == VIR_STORAGE_NET_PROTOCOL_RBD)
+                    expected_secret_usage = VIR_SECRET_USAGE_TYPE_CEPH;
+            }

-            } else if (!target &&
-                       xmlStrEqual(cur->name, BAD_CAST "target")) {
-                target = virXMLPropString(cur, "dev");
-                bus = virXMLPropString(cur, "bus");
-                tray = virXMLPropString(cur, "tray");
-                removable = virXMLPropString(cur, "removable");
-
-                /* HACK: Work around for compat with Xen
-                 * driver in previous libvirt releases */
-                if (target &&
-                    STRPREFIX(target, "ioemu:"))
-                    memmove(target, target+6, strlen(target)-5);
-            } else if (!domain_name &&
-                       xmlStrEqual(cur->name, BAD_CAST "backenddomain")) {
-                domain_name = virXMLPropString(cur, "name");
-            } else if (xmlStrEqual(cur->name, BAD_CAST "geometry")) {
-                if (virXPathUInt("string(./geometry/@cyls)",
-                                 ctxt, &def->geometry.cylinders) < 0) {
-                    virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                                   _("invalid geometry settings (cyls)"));
-                    goto error;
-                }
-                if (virXPathUInt("string(./geometry/@heads)",
-                                 ctxt, &def->geometry.heads) < 0) {
-                    virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                                   _("invalid geometry settings (heads)"));
-                    goto error;
-                }
-                if (virXPathUInt("string(./geometry/@secs)",
-                                 ctxt, &def->geometry.sectors) < 0) {
-                    virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                                   _("invalid geometry settings (secs)"));
-                    goto error;
-                }
-                trans = virXMLPropString(cur, "trans");
-                if (trans) {
-                    def->geometry.trans = virDomainDiskGeometryTransTypeFromString(trans);
-                    if (def->geometry.trans <= 0) {
-                        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                                       _("invalid translation value '%s'"),
-                                       trans);
-                        goto error;
-                    }
-                }
-            } else if (xmlStrEqual(cur->name, BAD_CAST "blockio")) {
-                logical_block_size =
-                    virXMLPropString(cur, "logical_block_size");
-                if (logical_block_size &&
-                    virStrToLong_ui(logical_block_size, NULL, 0,
-                                    &def->blockio.logical_block_size) < 0) {
-                    virReportError(VIR_ERR_INTERNAL_ERROR,
-                                   _("invalid logical block size '%s'"),
-                                   logical_block_size);
-                    goto error;
-                }
-                physical_block_size =
-                    virXMLPropString(cur, "physical_block_size");
-                if (physical_block_size &&
-                    virStrToLong_ui(physical_block_size, NULL, 0,
-                                    &def->blockio.physical_block_size) < 0) {
-                    virReportError(VIR_ERR_INTERNAL_ERROR,
-                                   _("invalid physical block size '%s'"),
-                                   physical_block_size);
+            startupPolicy = virXMLPropString(cur, "startupPolicy");
+
+        } else if (!target &&
+                   xmlStrEqual(cur->name, BAD_CAST "target")) {
+            target = virXMLPropString(cur, "dev");
+            bus = virXMLPropString(cur, "bus");
+            tray = virXMLPropString(cur, "tray");
+            removable = virXMLPropString(cur, "removable");
+
+            /* HACK: Work around for compat with Xen
+             * driver in previous libvirt releases */
+            if (target &&
+                STRPREFIX(target, "ioemu:"))
+                memmove(target, target+6, strlen(target)-5);
+        } else if (!domain_name &&
+                   xmlStrEqual(cur->name, BAD_CAST "backenddomain")) {
+            domain_name = virXMLPropString(cur, "name");
+        } else if (xmlStrEqual(cur->name, BAD_CAST "geometry")) {
+            if (virXPathUInt("string(./geometry/@cyls)",
+                             ctxt, &def->geometry.cylinders) < 0) {
+                virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                               _("invalid geometry settings (cyls)"));
+                goto error;
+            }
+            if (virXPathUInt("string(./geometry/@heads)",
+                             ctxt, &def->geometry.heads) < 0) {
+                virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                               _("invalid geometry settings (heads)"));
+                goto error;
+            }
+            if (virXPathUInt("string(./geometry/@secs)",
+                             ctxt, &def->geometry.sectors) < 0) {
+                virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                               _("invalid geometry settings (secs)"));
+                goto error;
+            }
+            trans = virXMLPropString(cur, "trans");
+            if (trans) {
+                def->geometry.trans = virDomainDiskGeometryTransTypeFromString(trans);
+                if (def->geometry.trans <= 0) {
+                    virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                                   _("invalid translation value '%s'"),
+                                   trans);
                     goto error;
                 }
-            } else if (!driverName &&
-                       xmlStrEqual(cur->name, BAD_CAST "driver")) {
-                driverName = virXMLPropString(cur, "name");
-                driverType = virXMLPropString(cur, "type");
-                if (STREQ_NULLABLE(driverType, "aio")) {
-                    /* In-place conversion to "raw", for Xen back-compat */
-                    driverType[0] = 'r';
-                    driverType[1] = 'a';
-                    driverType[2] = 'w';
-                }
-                cachetag = virXMLPropString(cur, "cache");
-                error_policy = virXMLPropString(cur, "error_policy");
-                rerror_policy = virXMLPropString(cur, "rerror_policy");
-                iotag = virXMLPropString(cur, "io");
-                ioeventfd = virXMLPropString(cur, "ioeventfd");
-                event_idx = virXMLPropString(cur, "event_idx");
-                copy_on_read = virXMLPropString(cur, "copy_on_read");
-                discard = virXMLPropString(cur, "discard");
-                driverIOThread = virXMLPropString(cur, "iothread");
-            } else if (!def->mirror &&
-                       xmlStrEqual(cur->name, BAD_CAST "mirror") &&
-                       !(flags & VIR_DOMAIN_DEF_PARSE_INACTIVE)) {
-                char *ready;
-                char *blockJob;
-
-                if (VIR_ALLOC(def->mirror) < 0)
-                    goto error;
+            }
+        } else if (xmlStrEqual(cur->name, BAD_CAST "blockio")) {
+            logical_block_size =
+                virXMLPropString(cur, "logical_block_size");
+            if (logical_block_size &&
+                virStrToLong_ui(logical_block_size, NULL, 0,
+                                &def->blockio.logical_block_size) < 0) {
+                virReportError(VIR_ERR_INTERNAL_ERROR,
+                               _("invalid logical block size '%s'"),
+                               logical_block_size);
+                goto error;
+            }
+            physical_block_size =
+                virXMLPropString(cur, "physical_block_size");
+            if (physical_block_size &&
+                virStrToLong_ui(physical_block_size, NULL, 0,
+                                &def->blockio.physical_block_size) < 0) {
+                virReportError(VIR_ERR_INTERNAL_ERROR,
+                               _("invalid physical block size '%s'"),
+                               physical_block_size);
+                goto error;
+            }
+        } else if (!driverName &&
+                   xmlStrEqual(cur->name, BAD_CAST "driver")) {
+            driverName = virXMLPropString(cur, "name");
+            driverType = virXMLPropString(cur, "type");
+            if (STREQ_NULLABLE(driverType, "aio")) {
+                /* In-place conversion to "raw", for Xen back-compat */
+                driverType[0] = 'r';
+                driverType[1] = 'a';
+                driverType[2] = 'w';
+            }
+            cachetag = virXMLPropString(cur, "cache");
+            error_policy = virXMLPropString(cur, "error_policy");
+            rerror_policy = virXMLPropString(cur, "rerror_policy");
+            iotag = virXMLPropString(cur, "io");
+            ioeventfd = virXMLPropString(cur, "ioeventfd");
+            event_idx = virXMLPropString(cur, "event_idx");
+            copy_on_read = virXMLPropString(cur, "copy_on_read");
+            discard = virXMLPropString(cur, "discard");
+            driverIOThread = virXMLPropString(cur, "iothread");
+        } else if (!def->mirror &&
+                   xmlStrEqual(cur->name, BAD_CAST "mirror") &&
+                   !(flags & VIR_DOMAIN_DEF_PARSE_INACTIVE)) {
+            char *ready;
+            char *blockJob;
+
+            if (VIR_ALLOC(def->mirror) < 0)
+                goto error;

-                blockJob = virXMLPropString(cur, "job");
-                if (blockJob) {
-                    def->mirrorJob = virDomainBlockJobTypeFromString(blockJob);
-                    if (def->mirrorJob <= 0) {
-                        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                                       _("unknown mirror job type '%s'"),
-                                       blockJob);
-                        VIR_FREE(blockJob);
-                        goto error;
-                    }
+            blockJob = virXMLPropString(cur, "job");
+            if (blockJob) {
+                def->mirrorJob = virDomainBlockJobTypeFromString(blockJob);
+                if (def->mirrorJob <= 0) {
+                    virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                                   _("unknown mirror job type '%s'"),
+                                   blockJob);
                     VIR_FREE(blockJob);
-                } else {
-                    def->mirrorJob = VIR_DOMAIN_BLOCK_JOB_TYPE_COPY;
-                }
-
-                mirrorType = virXMLPropString(cur, "type");
-                if (mirrorType) {
-                    def->mirror->type = virStorageTypeFromString(mirrorType);
-                    if (def->mirror->type <= 0) {
-                        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                                       _("unknown mirror backing store "
-                                         "type '%s'"), mirrorType);
-                        goto error;
-                    }
-                    mirrorFormat = virXPathString("string(./mirror/format/@type)",
-                                                  ctxt);
-                } else {
-                    /* For back-compat reasons, we handle a file name
-                     * encoded as attributes, even though we prefer
-                     * modern output in the style of backingStore */
-                    def->mirror->type = VIR_STORAGE_TYPE_FILE;
-                    def->mirror->path = virXMLPropString(cur, "file");
-                    if (!def->mirror->path) {
-                        virReportError(VIR_ERR_XML_ERROR, "%s",
-                                       _("mirror requires file name"));
-                        goto error;
-                    }
-                    if (def->mirrorJob != VIR_DOMAIN_BLOCK_JOB_TYPE_COPY) {
-                        virReportError(VIR_ERR_XML_ERROR, "%s",
-                                       _("mirror without type only supported "
-                                         "by copy job"));
-                        goto error;
-                    }
-                    mirrorFormat = virXMLPropString(cur, "format");
-                }
-                if (mirrorFormat) {
-                    def->mirror->format =
-                        virStorageFileFormatTypeFromString(mirrorFormat);
-                    if (def->mirror->format <= 0) {
-                        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                                       _("unknown mirror format value '%s'"),
-                                       mirrorFormat);
-                        goto error;
-                    }
+                    goto error;
                 }
-                if (mirrorType) {
-                    xmlNodePtr mirrorNode;
+                VIR_FREE(blockJob);
+            } else {
+                def->mirrorJob = VIR_DOMAIN_BLOCK_JOB_TYPE_COPY;
+            }

-                    if (!(mirrorNode = virXPathNode("./mirror/source", ctxt))) {
-                        virReportError(VIR_ERR_XML_ERROR, "%s",
-                                       _("mirror requires source element"));
-                        goto error;
-                    }
-                    if (virDomainDiskSourceParse(mirrorNode, ctxt,
-                                                 def->mirror) < 0)
-                        goto error;
-                }
-                ready = virXMLPropString(cur, "ready");
-                if (ready) {
-                    if ((def->mirrorState =
-                         virDomainDiskMirrorStateTypeFromString(ready)) < 0) {
-                        virReportError(VIR_ERR_XML_ERROR,
-                                       _("unknown mirror ready state %s"),
-                                       ready);
-                        VIR_FREE(ready);
-                        goto error;
-                    }
-                    VIR_FREE(ready);
-                }
-            } else if (!authdef &&
-                       xmlStrEqual(cur->name, BAD_CAST "auth")) {
-                if (!(authdef = virStorageAuthDefParse(node->doc, cur)))
-                    goto error;
-                /* Disk volume types won't have the secrettype filled in until
-                 * after virStorageTranslateDiskSourcePool is run
-                 */
-                if (def->src->type != VIR_STORAGE_TYPE_VOLUME &&
-                    (auth_secret_usage =
-                     virSecretUsageTypeFromString(authdef->secrettype)) < 0) {
+            mirrorType = virXMLPropString(cur, "type");
+            if (mirrorType) {
+                def->mirror->type = virStorageTypeFromString(mirrorType);
+                if (def->mirror->type <= 0) {
                     virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                                   _("invalid secret type %s"),
-                                   authdef->secrettype);
+                                   _("unknown mirror backing store "
+                                     "type '%s'"), mirrorType);
                     goto error;
                 }
-            } else if (xmlStrEqual(cur->name, BAD_CAST "iotune")) {
-                ret = virXPathULongLong("string(./iotune/total_bytes_sec)",
-                                        ctxt,
-                                        &def->blkdeviotune.total_bytes_sec);
-                if (ret == -2) {
+                mirrorFormat = virXPathString("string(./mirror/format/@type)",
+                                              ctxt);
+            } else {
+                /* For back-compat reasons, we handle a file name
+                 * encoded as attributes, even though we prefer
+                 * modern output in the style of backingStore */
+                def->mirror->type = VIR_STORAGE_TYPE_FILE;
+                def->mirror->path = virXMLPropString(cur, "file");
+                if (!def->mirror->path) {
                     virReportError(VIR_ERR_XML_ERROR, "%s",
-                                   _("total throughput limit must be an integer"));
+                                   _("mirror requires file name"));
                     goto error;
-                } else if (ret < 0) {
-                    def->blkdeviotune.total_bytes_sec = 0;
                 }
-
-                ret = virXPathULongLong("string(./iotune/read_bytes_sec)",
-                                        ctxt,
-                                        &def->blkdeviotune.read_bytes_sec);
-                if (ret == -2) {
+                if (def->mirrorJob != VIR_DOMAIN_BLOCK_JOB_TYPE_COPY) {
                     virReportError(VIR_ERR_XML_ERROR, "%s",
-                                   _("read throughput limit must be an integer"));
+                                   _("mirror without type only supported "
+                                     "by copy job"));
                     goto error;
-                } else if (ret < 0) {
-                    def->blkdeviotune.read_bytes_sec = 0;
                 }
-
-                ret = virXPathULongLong("string(./iotune/write_bytes_sec)",
-                                        ctxt,
-                                        &def->blkdeviotune.write_bytes_sec);
-                if (ret == -2) {
-                    virReportError(VIR_ERR_XML_ERROR, "%s",
-                                   _("write throughput limit must be an integer"));
+                mirrorFormat = virXMLPropString(cur, "format");
+            }
+            if (mirrorFormat) {
+                def->mirror->format =
+                    virStorageFileFormatTypeFromString(mirrorFormat);
+                if (def->mirror->format <= 0) {
+                    virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                                   _("unknown mirror format value '%s'"),
+                                   mirrorFormat);
                     goto error;
-                } else if (ret < 0) {
-                    def->blkdeviotune.write_bytes_sec = 0;
                 }
+            }
+            if (mirrorType) {
+                xmlNodePtr mirrorNode;

-                ret = virXPathULongLong("string(./iotune/total_iops_sec)",
-                                        ctxt,
-                                        &def->blkdeviotune.total_iops_sec);
-                if (ret == -2) {
+                if (!(mirrorNode = virXPathNode("./mirror/source", ctxt))) {
                     virReportError(VIR_ERR_XML_ERROR, "%s",
-                                   _("total I/O operations limit must be an integer"));
+                                   _("mirror requires source element"));
                     goto error;
-                } else if (ret < 0) {
-                    def->blkdeviotune.total_iops_sec = 0;
                 }
-
-                ret = virXPathULongLong("string(./iotune/read_iops_sec)",
-                                        ctxt,
-                                        &def->blkdeviotune.read_iops_sec);
-                if (ret == -2) {
-                    virReportError(VIR_ERR_XML_ERROR, "%s",
-                                   _("read I/O operations limit must be an integer"));
+                if (virDomainDiskSourceParse(mirrorNode, ctxt,
+                                             def->mirror) < 0)
                     goto error;
-                } else if (ret < 0) {
-                    def->blkdeviotune.read_iops_sec = 0;
-                }
-
-                ret = virXPathULongLong("string(./iotune/write_iops_sec)",
-                                        ctxt,
-                                        &def->blkdeviotune.write_iops_sec);
-                if (ret == -2) {
-                    virReportError(VIR_ERR_XML_ERROR, "%s",
-                                   _("write I/O operations limit must be an integer"));
+            }
+            ready = virXMLPropString(cur, "ready");
+            if (ready) {
+                if ((def->mirrorState =
+                     virDomainDiskMirrorStateTypeFromString(ready)) < 0) {
+                    virReportError(VIR_ERR_XML_ERROR,
+                                   _("unknown mirror ready state %s"),
+                                   ready);
+                    VIR_FREE(ready);
                     goto error;
-                } else if (ret < 0) {
-                    def->blkdeviotune.write_iops_sec = 0;
                 }
+                VIR_FREE(ready);
+            }
+        } else if (!authdef &&
+                   xmlStrEqual(cur->name, BAD_CAST "auth")) {
+            if (!(authdef = virStorageAuthDefParse(node->doc, cur)))
+                goto error;
+            /* Disk volume types won't have the secrettype filled in until
+             * after virStorageTranslateDiskSourcePool is run
+             */
+            if (def->src->type != VIR_STORAGE_TYPE_VOLUME &&
+                (auth_secret_usage =
+                 virSecretUsageTypeFromString(authdef->secrettype)) < 0) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                               _("invalid secret type %s"),
+                               authdef->secrettype);
+                goto error;
+            }
+        } else if (xmlStrEqual(cur->name, BAD_CAST "iotune")) {
+            ret = virXPathULongLong("string(./iotune/total_bytes_sec)",
+                                    ctxt,
+                                    &def->blkdeviotune.total_bytes_sec);
+            if (ret == -2) {
+                virReportError(VIR_ERR_XML_ERROR, "%s",
+                               _("total throughput limit must be an integer"));
+                goto error;
+            } else if (ret < 0) {
+                def->blkdeviotune.total_bytes_sec = 0;
+            }

-                if (virXPathULongLong("string(./iotune/total_bytes_sec_max)",
-                                      ctxt,
-                                      &def->blkdeviotune.total_bytes_sec_max) < 0) {
-                    def->blkdeviotune.total_bytes_sec_max = 0;
-                }
+            ret = virXPathULongLong("string(./iotune/read_bytes_sec)",
+                                    ctxt,
+                                    &def->blkdeviotune.read_bytes_sec);
+            if (ret == -2) {
+                virReportError(VIR_ERR_XML_ERROR, "%s",
+                               _("read throughput limit must be an integer"));
+                goto error;
+            } else if (ret < 0) {
+                def->blkdeviotune.read_bytes_sec = 0;
+            }

-                if (virXPathULongLong("string(./iotune/read_bytes_sec_max)",
-                                      ctxt,
-                                      &def->blkdeviotune.read_bytes_sec_max) < 0) {
-                    def->blkdeviotune.read_bytes_sec_max = 0;
-                }
+            ret = virXPathULongLong("string(./iotune/write_bytes_sec)",
+                                    ctxt,
+                                    &def->blkdeviotune.write_bytes_sec);
+            if (ret == -2) {
+                virReportError(VIR_ERR_XML_ERROR, "%s",
+                               _("write throughput limit must be an integer"));
+                goto error;
+            } else if (ret < 0) {
+                def->blkdeviotune.write_bytes_sec = 0;
+            }

-                if (virXPathULongLong("string(./iotune/write_bytes_sec_max)",
-                                      ctxt,
-                                      &def->blkdeviotune.write_bytes_sec_max) < 0) {
-                    def->blkdeviotune.write_bytes_sec_max = 0;
-                }
+            ret = virXPathULongLong("string(./iotune/total_iops_sec)",
+                                    ctxt,
+                                    &def->blkdeviotune.total_iops_sec);
+            if (ret == -2) {
+                virReportError(VIR_ERR_XML_ERROR, "%s",
+                               _("total I/O operations limit must be an integer"));
+                goto error;
+            } else if (ret < 0) {
+                def->blkdeviotune.total_iops_sec = 0;
+            }

-                if (virXPathULongLong("string(./iotune/total_iops_sec_max)",
-                                      ctxt,
-                                      &def->blkdeviotune.total_iops_sec_max) < 0) {
-                    def->blkdeviotune.total_iops_sec_max = 0;
-                }
+            ret = virXPathULongLong("string(./iotune/read_iops_sec)",
+                                    ctxt,
+                                    &def->blkdeviotune.read_iops_sec);
+            if (ret == -2) {
+                virReportError(VIR_ERR_XML_ERROR, "%s",
+                               _("read I/O operations limit must be an integer"));
+                goto error;
+            } else if (ret < 0) {
+                def->blkdeviotune.read_iops_sec = 0;
+            }

-                if (virXPathULongLong("string(./iotune/read_iops_sec_max)",
-                                      ctxt,
-                                      &def->blkdeviotune.read_iops_sec_max) < 0) {
-                    def->blkdeviotune.read_iops_sec_max = 0;
-                }
+            ret = virXPathULongLong("string(./iotune/write_iops_sec)",
+                                    ctxt,
+                                    &def->blkdeviotune.write_iops_sec);
+            if (ret == -2) {
+                virReportError(VIR_ERR_XML_ERROR, "%s",
+                               _("write I/O operations limit must be an integer"));
+                goto error;
+            } else if (ret < 0) {
+                def->blkdeviotune.write_iops_sec = 0;
+            }

-                if (virXPathULongLong("string(./iotune/write_iops_sec_max)",
-                                      ctxt,
-                                      &def->blkdeviotune.write_iops_sec_max) < 0) {
-                    def->blkdeviotune.write_iops_sec_max = 0;
-                }
+            if (virXPathULongLong("string(./iotune/total_bytes_sec_max)",
+                                  ctxt,
+                                  &def->blkdeviotune.total_bytes_sec_max) < 0) {
+                def->blkdeviotune.total_bytes_sec_max = 0;
+            }

-                if (virXPathULongLong("string(./iotune/size_iops_sec)",
-                                      ctxt,
-                                      &def->blkdeviotune.size_iops_sec) < 0) {
-                    def->blkdeviotune.size_iops_sec = 0;
-                }
+            if (virXPathULongLong("string(./iotune/read_bytes_sec_max)",
+                                  ctxt,
+                                  &def->blkdeviotune.read_bytes_sec_max) < 0) {
+                def->blkdeviotune.read_bytes_sec_max = 0;
+            }

+            if (virXPathULongLong("string(./iotune/write_bytes_sec_max)",
+                                  ctxt,
+                                  &def->blkdeviotune.write_bytes_sec_max) < 0) {
+                def->blkdeviotune.write_bytes_sec_max = 0;
+            }

-                if ((def->blkdeviotune.total_bytes_sec &&
-                     def->blkdeviotune.read_bytes_sec) ||
-                    (def->blkdeviotune.total_bytes_sec &&
-                     def->blkdeviotune.write_bytes_sec)) {
-                    virReportError(VIR_ERR_XML_ERROR, "%s",
-                                   _("total and read/write bytes_sec "
-                                     "cannot be set at the same time"));
-                    goto error;
-                }
+            if (virXPathULongLong("string(./iotune/total_iops_sec_max)",
+                                  ctxt,
+                                  &def->blkdeviotune.total_iops_sec_max) < 0) {
+                def->blkdeviotune.total_iops_sec_max = 0;
+            }

-                if ((def->blkdeviotune.total_iops_sec &&
-                     def->blkdeviotune.read_iops_sec) ||
-                    (def->blkdeviotune.total_iops_sec &&
-                     def->blkdeviotune.write_iops_sec)) {
-                    virReportError(VIR_ERR_XML_ERROR, "%s",
-                                   _("total and read/write iops_sec "
-                                     "cannot be set at the same time"));
-                    goto error;
-                }
+            if (virXPathULongLong("string(./iotune/read_iops_sec_max)",
+                                  ctxt,
+                                  &def->blkdeviotune.read_iops_sec_max) < 0) {
+                def->blkdeviotune.read_iops_sec_max = 0;
+            }

-                if ((def->blkdeviotune.total_bytes_sec_max &&
-                     def->blkdeviotune.read_bytes_sec_max) ||
-                    (def->blkdeviotune.total_bytes_sec_max &&
-                     def->blkdeviotune.write_bytes_sec_max)) {
-                    virReportError(VIR_ERR_XML_ERROR, "%s",
-                                   _("total and read/write bytes_sec_max "
-                                     "cannot be set at the same time"));
-                    goto error;
-                }
+            if (virXPathULongLong("string(./iotune/write_iops_sec_max)",
+                                  ctxt,
+                                  &def->blkdeviotune.write_iops_sec_max) < 0) {
+                def->blkdeviotune.write_iops_sec_max = 0;
+            }

-                if ((def->blkdeviotune.total_iops_sec_max &&
-                     def->blkdeviotune.read_iops_sec_max) ||
-                    (def->blkdeviotune.total_iops_sec_max &&
-                     def->blkdeviotune.write_iops_sec_max)) {
-                    virReportError(VIR_ERR_XML_ERROR, "%s",
-                                   _("total and read/write iops_sec_max "
-                                     "cannot be set at the same time"));
-                    goto error;
-                }
+            if (virXPathULongLong("string(./iotune/size_iops_sec)",
+                                  ctxt,
+                                  &def->blkdeviotune.size_iops_sec) < 0) {
+                def->blkdeviotune.size_iops_sec = 0;
+            }

-            } else if (xmlStrEqual(cur->name, BAD_CAST "readonly")) {
-                def->src->readonly = true;
-            } else if (xmlStrEqual(cur->name, BAD_CAST "shareable")) {
-                def->src->shared = true;
-            } else if (xmlStrEqual(cur->name, BAD_CAST "transient")) {
-                def->transient = true;
-            } else if ((flags & VIR_DOMAIN_DEF_PARSE_STATUS) &&
-                       xmlStrEqual(cur->name, BAD_CAST "state")) {
-                /* Legacy back-compat. Don't add any more attributes here */
-                devaddr = virXMLPropString(cur, "devaddr");
-            } else if (encryption == NULL &&
-                       xmlStrEqual(cur->name, BAD_CAST "encryption")) {
-                encryption = virStorageEncryptionParseNode(node->doc,
-                                                           cur);
-                if (encryption == NULL)
-                    goto error;
-            } else if (!serial &&
-                       xmlStrEqual(cur->name, BAD_CAST "serial")) {
-                serial = (char *)xmlNodeGetContent(cur);
-            } else if (!wwn &&
-                       xmlStrEqual(cur->name, BAD_CAST "wwn")) {
-                wwn = (char *)xmlNodeGetContent(cur);
-
-                if (!virValidateWWN(wwn))
-                    goto error;
-            } else if (!vendor &&
-                       xmlStrEqual(cur->name, BAD_CAST "vendor")) {
-                vendor = (char *)xmlNodeGetContent(cur);

-                if (strlen(vendor) > VENDOR_LEN) {
-                    virReportError(VIR_ERR_XML_ERROR, "%s",
-                                   _("disk vendor is more than 8 characters"));
-                    goto error;
-                }
+            if ((def->blkdeviotune.total_bytes_sec &&
+                 def->blkdeviotune.read_bytes_sec) ||
+                (def->blkdeviotune.total_bytes_sec &&
+                 def->blkdeviotune.write_bytes_sec)) {
+                virReportError(VIR_ERR_XML_ERROR, "%s",
+                               _("total and read/write bytes_sec "
+                                 "cannot be set at the same time"));
+                goto error;
+            }

-                if (!virStringIsPrintable(vendor)) {
-                    virReportError(VIR_ERR_XML_ERROR, "%s",
-                                   _("disk vendor is not printable string"));
-                    goto error;
-                }
-            } else if (!product &&
-                       xmlStrEqual(cur->name, BAD_CAST "product")) {
-                product = (char *)xmlNodeGetContent(cur);
+            if ((def->blkdeviotune.total_iops_sec &&
+                 def->blkdeviotune.read_iops_sec) ||
+                (def->blkdeviotune.total_iops_sec &&
+                 def->blkdeviotune.write_iops_sec)) {
+                virReportError(VIR_ERR_XML_ERROR, "%s",
+                               _("total and read/write iops_sec "
+                                 "cannot be set at the same time"));
+                goto error;
+            }

-                if (strlen(product) > PRODUCT_LEN) {
-                    virReportError(VIR_ERR_XML_ERROR, "%s",
-                                   _("disk product is more than 16 characters"));
-                    goto error;
-                }
+            if ((def->blkdeviotune.total_bytes_sec_max &&
+                 def->blkdeviotune.read_bytes_sec_max) ||
+                (def->blkdeviotune.total_bytes_sec_max &&
+                 def->blkdeviotune.write_bytes_sec_max)) {
+                virReportError(VIR_ERR_XML_ERROR, "%s",
+                               _("total and read/write bytes_sec_max "
+                                 "cannot be set at the same time"));
+                goto error;
+            }

-                if (!virStringIsPrintable(product)) {
-                    virReportError(VIR_ERR_XML_ERROR, "%s",
-                                   _("disk product is not printable string"));
-                    goto error;
-                }
-            } else if (xmlStrEqual(cur->name, BAD_CAST "boot")) {
-                /* boot is parsed as part of virDomainDeviceInfoParseXML */
+            if ((def->blkdeviotune.total_iops_sec_max &&
+                 def->blkdeviotune.read_iops_sec_max) ||
+                (def->blkdeviotune.total_iops_sec_max &&
+                 def->blkdeviotune.write_iops_sec_max)) {
+                virReportError(VIR_ERR_XML_ERROR, "%s",
+                               _("total and read/write iops_sec_max "
+                                 "cannot be set at the same time"));
+                goto error;
+            }
+
+        } else if (xmlStrEqual(cur->name, BAD_CAST "readonly")) {
+            def->src->readonly = true;
+        } else if (xmlStrEqual(cur->name, BAD_CAST "shareable")) {
+            def->src->shared = true;
+        } else if (xmlStrEqual(cur->name, BAD_CAST "transient")) {
+            def->transient = true;
+        } else if ((flags & VIR_DOMAIN_DEF_PARSE_STATUS) &&
+                   xmlStrEqual(cur->name, BAD_CAST "state")) {
+            /* Legacy back-compat. Don't add any more attributes here */
+            devaddr = virXMLPropString(cur, "devaddr");
+        } else if (encryption == NULL &&
+                   xmlStrEqual(cur->name, BAD_CAST "encryption")) {
+            encryption = virStorageEncryptionParseNode(node->doc,
+                                                       cur);
+            if (encryption == NULL)
+                goto error;
+        } else if (!serial &&
+                   xmlStrEqual(cur->name, BAD_CAST "serial")) {
+            serial = (char *)xmlNodeGetContent(cur);
+        } else if (!wwn &&
+                   xmlStrEqual(cur->name, BAD_CAST "wwn")) {
+            wwn = (char *)xmlNodeGetContent(cur);
+
+            if (!virValidateWWN(wwn))
+                goto error;
+        } else if (!vendor &&
+                   xmlStrEqual(cur->name, BAD_CAST "vendor")) {
+            vendor = (char *)xmlNodeGetContent(cur);
+
+            if (strlen(vendor) > VENDOR_LEN) {
+                virReportError(VIR_ERR_XML_ERROR, "%s",
+                               _("disk vendor is more than 8 characters"));
+                goto error;
             }
+
+            if (!virStringIsPrintable(vendor)) {
+                virReportError(VIR_ERR_XML_ERROR, "%s",
+                               _("disk vendor is not printable string"));
+                goto error;
+            }
+        } else if (!product &&
+                   xmlStrEqual(cur->name, BAD_CAST "product")) {
+            product = (char *)xmlNodeGetContent(cur);
+
+            if (strlen(product) > PRODUCT_LEN) {
+                virReportError(VIR_ERR_XML_ERROR, "%s",
+                               _("disk product is more than 16 characters"));
+                goto error;
+            }
+
+            if (!virStringIsPrintable(product)) {
+                virReportError(VIR_ERR_XML_ERROR, "%s",
+                               _("disk product is not printable string"));
+                goto error;
+            }
+        } else if (xmlStrEqual(cur->name, BAD_CAST "boot")) {
+            /* boot is parsed as part of virDomainDeviceInfoParseXML */
         }
-        cur = cur->next;
     }

     /* Disk volume types will have authentication information handled in
-- 
2.8.0




More information about the libvir-list mailing list