From 35a8487ad91d29d480e6a3dd2d361ea9e9029183 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Mon, 12 Mar 2018 15:33:39 +0100 Subject: [PATCH] qemu: domain: Extract parsing of NBD status XML Extract the NBD portion of the 'job' status XML element parser into a separate function. Signed-off-by: Peter Krempa Reviewed-by: John Ferlan --- src/qemu/qemu_domain.c | 60 ++++++++++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 0bca80f3c6..83e6f1a216 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -2367,16 +2367,50 @@ qemuDomainObjPrivateXMLParsePR(xmlXPathContextPtr ctxt, } +static int +qemuDomainObjPrivateXMLParseJobNBD(virDomainObjPtr vm, + qemuDomainObjPrivatePtr priv, + xmlXPathContextPtr ctxt) +{ + xmlNodePtr *nodes = NULL; + size_t i; + int n; + int ret = -1; + + if ((n = virXPathNodeSet("./disk[@migrating='yes']", ctxt, &nodes)) < 0) + goto cleanup; + + if (n > 0) { + if (priv->job.asyncJob != QEMU_ASYNC_JOB_MIGRATION_OUT) { + VIR_WARN("Found disks marked for migration but we were not " + "migrating"); + n = 0; + } + for (i = 0; i < n; i++) { + char *dst = virXMLPropString(nodes[i], "dev"); + virDomainDiskDefPtr disk; + + if (dst && (disk = virDomainDiskByName(vm->def, dst, false))) + QEMU_DOMAIN_DISK_PRIVATE(disk)->migrating = true; + VIR_FREE(dst); + } + } + + ret = 0; + + cleanup: + VIR_FREE(nodes); + return ret; +} + + static int qemuDomainObjPrivateXMLParseJob(virDomainObjPtr vm, qemuDomainObjPrivatePtr priv, xmlXPathContextPtr ctxt) { - xmlNodePtr *nodes = NULL; xmlNodePtr savedNode = ctxt->node; char *tmp = NULL; - size_t i; - int n; int ret = -1; if (!(ctxt->node = virXPathNode("./job[1]", ctxt))) { @@ -2423,26 +2457,9 @@ qemuDomainObjPrivateXMLParseJob(virDomainObjPtr vm, goto cleanup; } - if ((n = virXPathNodeSet("./disk[@migrating='yes']", ctxt, &nodes)) < 0) + if (qemuDomainObjPrivateXMLParseJobNBD(vm, priv, ctxt) < 0) goto cleanup; - if (n > 0) { - if (priv->job.asyncJob != QEMU_ASYNC_JOB_MIGRATION_OUT) { - VIR_WARN("Found disks marked for migration but we were not " - "migrating"); - n = 0; - } - for (i = 0; i < n; i++) { - char *dst = virXMLPropString(nodes[i], "dev"); - virDomainDiskDefPtr disk; - - if (dst && (disk = virDomainDiskByName(vm->def, dst, false))) - QEMU_DOMAIN_DISK_PRIVATE(disk)->migrating = true; - VIR_FREE(dst); - } - } - VIR_FREE(nodes); - if (qemuMigrationParamsParse(ctxt, &priv->job.migParams) < 0) goto cleanup; @@ -2451,7 +2468,6 @@ qemuDomainObjPrivateXMLParseJob(virDomainObjPtr vm, cleanup: ctxt->node = savedNode; VIR_FREE(tmp); - VIR_FREE(nodes); return ret; }