diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index b185fe79af..01bd56b5e1 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -13561,7 +13561,8 @@ char *virDomainSnapshotDefFormat(const char *domain_uuid, virBuffer buf = VIR_BUFFER_INITIALIZER; int i; - virCheckFlags(VIR_DOMAIN_XML_SECURE, NULL); + virCheckFlags(VIR_DOMAIN_XML_SECURE | + VIR_DOMAIN_XML_UPDATE_CPU, NULL); flags |= VIR_DOMAIN_XML_INACTIVE; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 2fed91ed6b..f8b7c96532 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -47,6 +47,10 @@ #define QEMU_NAMESPACE_HREF "http://libvirt.org/schemas/domain/qemu/1.0" +#define QEMU_DOMAIN_FORMAT_LIVE_FLAGS \ + (VIR_DOMAIN_XML_SECURE | \ + VIR_DOMAIN_XML_UPDATE_CPU) + VIR_ENUM_DECL(qemuDomainJob) VIR_ENUM_IMPL(qemuDomainJob, QEMU_JOB_LAST, "none", @@ -1192,6 +1196,19 @@ char *qemuDomainFormatXML(struct qemud_driver *driver, return qemuDomainDefFormatXML(driver, def, flags); } +char * +qemuDomainDefFormatLive(struct qemud_driver *driver, + virDomainDefPtr def, + bool inactive) +{ + unsigned int flags = QEMU_DOMAIN_FORMAT_LIVE_FLAGS; + + if (inactive) + flags |= VIR_DOMAIN_XML_INACTIVE; + + return qemuDomainDefFormatXML(driver, def, flags); +} + void qemuDomainObjTaint(struct qemud_driver *driver, virDomainObjPtr obj, @@ -1436,11 +1453,9 @@ qemuDomainSnapshotWriteMetadata(virDomainObjPtr vm, virUUIDFormat(vm->def->uuid, uuidstr); newxml = virDomainSnapshotDefFormat(uuidstr, snapshot->def, - VIR_DOMAIN_XML_SECURE, 1); - if (newxml == NULL) { - virReportOOMError(); + QEMU_DOMAIN_FORMAT_LIVE_FLAGS, 1); + if (newxml == NULL) return -1; - } if (virAsprintf(&snapDir, "%s/%s", snapshotDir, vm->def->name) < 0) { virReportOOMError(); diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 1333d8cd7c..f8e943f70d 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -232,6 +232,10 @@ char *qemuDomainFormatXML(struct qemud_driver *driver, virDomainObjPtr vm, unsigned int flags); +char *qemuDomainDefFormatLive(struct qemud_driver *driver, + virDomainDefPtr def, + bool inactive); + void qemuDomainObjTaint(struct qemud_driver *driver, virDomainObjPtr obj, enum virDomainTaintFlags taint, diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 3147a9bf64..e0db63935f 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -2587,11 +2587,9 @@ qemuDomainSaveInternal(struct qemud_driver *driver, virDomainPtr dom, virDomainDefFree(def); goto endjob; } - xml = virDomainDefFormat(def, (VIR_DOMAIN_XML_INACTIVE | - VIR_DOMAIN_XML_SECURE)); + xml = qemuDomainDefFormatLive(driver, def, true); } else { - xml = virDomainDefFormat(vm->def, (VIR_DOMAIN_XML_INACTIVE | - VIR_DOMAIN_XML_SECURE)); + xml = qemuDomainDefFormatLive(driver, vm->def, true); } if (!xml) { qemuReportError(VIR_ERR_OPERATION_FAILED, @@ -10173,8 +10171,7 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain, } else { /* Easiest way to clone inactive portion of vm->def is via * conversion in and back out of xml. */ - if (!(xml = virDomainDefFormat(vm->def, (VIR_DOMAIN_XML_INACTIVE | - VIR_DOMAIN_XML_SECURE))) || + if (!(xml = qemuDomainDefFormatLive(driver, vm->def, true)) || !(def->dom = virDomainDefParseString(driver->caps, xml, QEMU_EXPECTED_VIRT_TYPES, VIR_DOMAIN_XML_INACTIVE))) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 92d046a3b0..81b2d5b9e8 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -1092,13 +1092,9 @@ char *qemuMigrationBegin(struct qemud_driver *driver, if (!virDomainDefCheckABIStability(vm->def, def)) goto cleanup; - rv = qemuDomainDefFormatXML(driver, def, - VIR_DOMAIN_XML_SECURE | - VIR_DOMAIN_XML_UPDATE_CPU); + rv = qemuDomainDefFormatLive(driver, def, false); } else { - rv = qemuDomainFormatXML(driver, vm, - VIR_DOMAIN_XML_SECURE | - VIR_DOMAIN_XML_UPDATE_CPU); + rv = qemuDomainDefFormatLive(driver, vm->def, false); } cleanup: