Pull out the common parts of virDomainSnapshotDef that will be reused for virDomainCheckpointDef into a new base class. Adjust all callers that use the direct fields (some of it is churn that disappears when the next patch refactors virDomainSnapshotObj; oh well...). Signed-off-by: Eric Blake <eblake@xxxxxxxxxx> --- src/conf/moment_conf.h | 41 +++++++++ src/conf/snapshot_conf.h | 11 +-- src/conf/virconftypes.h | 3 + src/conf/Makefile.inc.am | 2 + src/conf/moment_conf.c | 40 +++++++++ src/conf/snapshot_conf.c | 128 ++++++++++++++-------------- src/conf/virdomainsnapshotobj.c | 2 +- src/conf/virdomainsnapshotobjlist.c | 21 ++--- src/esx/esx_driver.c | 16 ++-- src/qemu/qemu_command.c | 2 +- src/qemu/qemu_domain.c | 18 ++-- src/qemu/qemu_driver.c | 50 +++++------ src/test/test_driver.c | 42 ++++----- src/vbox/vbox_common.c | 88 +++++++++---------- 14 files changed, 273 insertions(+), 191 deletions(-) create mode 100644 src/conf/moment_conf.h create mode 100644 src/conf/moment_conf.c diff --git a/src/conf/moment_conf.h b/src/conf/moment_conf.h new file mode 100644 index 0000000000..348cfe5a5c --- /dev/null +++ b/src/conf/moment_conf.h @@ -0,0 +1,41 @@ +/* + * moment_conf.h: domain snapshot/checkpoint base class + * + * Copyright (C) 2006-2019 Red Hat, Inc. + * Copyright (C) 2006-2008 Daniel P. Berrange + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + */ + +#ifndef LIBVIRT_MOMENT_CONF_H +# define LIBVIRT_MOMENT_CONF_H + +# include "internal.h" +# include "virconftypes.h" + +/* Base class for a domain moment */ +struct _virDomainMomentDef { + /* Common portion of public XML. */ + char *name; + char *description; + char *parent; + long long creationTime; /* in seconds */ + + virDomainDefPtr dom; +}; + +void virDomainMomentDefClear(virDomainMomentDefPtr def); + +#endif /* LIBVIRT_MOMENT_CONF_H */ diff --git a/src/conf/snapshot_conf.h b/src/conf/snapshot_conf.h index b13a500af4..4b777e94dc 100644 --- a/src/conf/snapshot_conf.h +++ b/src/conf/snapshot_conf.h @@ -24,6 +24,7 @@ # include "internal.h" # include "domain_conf.h" +# include "moment_conf.h" /* Items related to snapshot state */ @@ -72,11 +73,9 @@ struct _virDomainSnapshotDiskDef { /* Stores the complete snapshot metadata */ struct _virDomainSnapshotDef { - /* Public XML. */ - char *name; - char *description; - char *parent; - long long creationTime; /* in seconds */ + virDomainMomentDef common; + + /* Additional public XML. */ int state; /* virDomainSnapshotState */ int memory; /* virDomainMemorySnapshot */ @@ -85,8 +84,6 @@ struct _virDomainSnapshotDef { size_t ndisks; /* should not exceed dom->ndisks */ virDomainSnapshotDiskDef *disks; - virDomainDefPtr dom; - virObjectPtr cookie; }; diff --git a/src/conf/virconftypes.h b/src/conf/virconftypes.h index 3265c0468a..9b9ab314e7 100644 --- a/src/conf/virconftypes.h +++ b/src/conf/virconftypes.h @@ -217,6 +217,9 @@ typedef virDomainMemoryDef *virDomainMemoryDefPtr; typedef struct _virDomainMemtune virDomainMemtune; typedef virDomainMemtune *virDomainMemtunePtr; +typedef struct _virDomainMomentDef virDomainMomentDef; +typedef virDomainMomentDef *virDomainMomentDefPtr; + typedef struct _virDomainNVRAMDef virDomainNVRAMDef; typedef virDomainNVRAMDef *virDomainNVRAMDefPtr; diff --git a/src/conf/Makefile.inc.am b/src/conf/Makefile.inc.am index 9b4d80485b..d2ff8be8fd 100644 --- a/src/conf/Makefile.inc.am +++ b/src/conf/Makefile.inc.am @@ -22,6 +22,8 @@ DOMAIN_CONF_SOURCES = \ conf/domain_nwfilter.h \ conf/virsavecookie.c \ conf/virsavecookie.h \ + conf/moment_conf.c \ + conf/moment_conf.h \ conf/snapshot_conf.c \ conf/snapshot_conf.h \ conf/numa_conf.c \ diff --git a/src/conf/moment_conf.c b/src/conf/moment_conf.c new file mode 100644 index 0000000000..f9276a5d1e --- /dev/null +++ b/src/conf/moment_conf.c @@ -0,0 +1,40 @@ +/* + * moment_conf.c: domain snapshot/checkpoint base class + * + * Copyright (C) 2006-2019 Red Hat, Inc. + * Copyright (C) 2006-2008 Daniel P. Berrange + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include "internal.h" +#include "moment_conf.h" +#include "domain_conf.h" +#include "virlog.h" +#include "viralloc.h" + +#define VIR_FROM_THIS VIR_FROM_DOMAIN_SNAPSHOT + +VIR_LOG_INIT("conf.moment_conf"); + +void virDomainMomentDefClear(virDomainMomentDefPtr def) +{ + VIR_FREE(def->name); + VIR_FREE(def->description); + VIR_FREE(def->parent); + virDomainDefFree(def->dom); +} diff --git a/src/conf/snapshot_conf.c b/src/conf/snapshot_conf.c index aec23f111c..b80b199ce4 100644 --- a/src/conf/snapshot_conf.c +++ b/src/conf/snapshot_conf.c @@ -87,14 +87,11 @@ void virDomainSnapshotDefFree(virDomainSnapshotDefPtr def) if (!def) return; - VIR_FREE(def->name); - VIR_FREE(def->description); - VIR_FREE(def->parent); + virDomainMomentDefClear(&def->common); VIR_FREE(def->file); for (i = 0; i < def->ndisks; i++) virDomainSnapshotDiskDefClear(&def->disks[i]); VIR_FREE(def->disks); - virDomainDefFree(def->dom); virObjectUnref(def->cookie); VIR_FREE(def); } @@ -213,28 +210,28 @@ virDomainSnapshotDefParse(xmlXPathContextPtr ctxt, gettimeofday(&tv, NULL); - def->name = virXPathString("string(./name)", ctxt); - if (def->name == NULL) { + def->common.name = virXPathString("string(./name)", ctxt); + if (def->common.name == NULL) { if (flags & VIR_DOMAIN_SNAPSHOT_PARSE_REDEFINE) { virReportError(VIR_ERR_XML_ERROR, "%s", _("a redefined snapshot must have a name")); goto cleanup; } - if (virAsprintf(&def->name, "%lld", (long long)tv.tv_sec) < 0) + if (virAsprintf(&def->common.name, "%lld", (long long)tv.tv_sec) < 0) goto cleanup; } - def->description = virXPathString("string(./description)", ctxt); + def->common.description = virXPathString("string(./description)", ctxt); if (flags & VIR_DOMAIN_SNAPSHOT_PARSE_REDEFINE) { if (virXPathLongLong("string(./creationTime)", ctxt, - &def->creationTime) < 0) { + &def->common.creationTime) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing creationTime from existing snapshot")); goto cleanup; } - def->parent = virXPathString("string(./parent/name)", ctxt); + def->common.parent = virXPathString("string(./parent/name)", ctxt); state = virXPathString("string(./state)", ctxt); if (state == NULL) { @@ -270,15 +267,15 @@ virDomainSnapshotDefParse(xmlXPathContextPtr ctxt, _("missing domain in snapshot")); goto cleanup; } - def->dom = virDomainDefParseNode(ctxt->node->doc, domainNode, - caps, xmlopt, NULL, domainflags); - if (!def->dom) + def->common.dom = virDomainDefParseNode(ctxt->node->doc, domainNode, + caps, xmlopt, NULL, domainflags); + if (!def->common.dom) goto cleanup; } else { VIR_WARN("parsing older snapshot that lacks domain"); } } else { - def->creationTime = tv.tv_sec; + def->common.creationTime = tv.tv_sec; } memorySnapshot = virXPathString("string(./memory/@snapshot)", ctxt); @@ -424,7 +421,7 @@ virDomainSnapshotDefParseString(const char *xmlStr, /* Perform sanity checking on a redefined snapshot definition. If - * @other is non-NULL, this may include swapping def->dom from other + * @other is non-NULL, this may include swapping def->common.dom from other * into def. */ int virDomainSnapshotRedefineValidate(virDomainSnapshotDefPtr def, @@ -442,16 +439,17 @@ virDomainSnapshotRedefineValidate(virDomainSnapshotDefPtr def, virReportError(VIR_ERR_INVALID_ARG, _("disk-only flag for snapshot %s requires " "disk-snapshot state"), - def->name); + def->common.name); return -1; } - if (def->dom && memcmp(def->dom->uuid, domain_uuid, VIR_UUID_BUFLEN)) { + if (def->common.dom && memcmp(def->common.dom->uuid, domain_uuid, + VIR_UUID_BUFLEN)) { char uuidstr[VIR_UUID_STRING_BUFLEN]; virUUIDFormat(domain_uuid, uuidstr); virReportError(VIR_ERR_INVALID_ARG, _("definition for snapshot %s must use uuid %s"), - def->name, uuidstr); + def->common.name, uuidstr); return -1; } @@ -465,7 +463,7 @@ virDomainSnapshotRedefineValidate(virDomainSnapshotDefPtr def, virReportError(VIR_ERR_INVALID_ARG, _("cannot change between online and offline " "snapshot state in snapshot %s"), - def->name); + def->common.name); return -1; } @@ -474,24 +472,24 @@ virDomainSnapshotRedefineValidate(virDomainSnapshotDefPtr def, virReportError(VIR_ERR_INVALID_ARG, _("cannot change between disk only and " "full system in snapshot %s"), - def->name); + def->common.name); return -1; } - if (otherdef->dom) { - if (def->dom) { - if (!virDomainDefCheckABIStability(otherdef->dom, - def->dom, xmlopt)) + if (otherdef->common.dom) { + if (def->common.dom) { + if (!virDomainDefCheckABIStability(otherdef->common.dom, + def->common.dom, xmlopt)) return -1; } else { /* Transfer the domain def */ - def->dom = otherdef->dom; - otherdef->dom = NULL; + def->common.dom = otherdef->common.dom; + otherdef->common.dom = NULL; } } } - if (def->dom) { + if (def->common.dom) { if (external) { align_location = VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL; align_match = false; @@ -538,7 +536,7 @@ virDomainSnapshotDefAssignExternalNames(virDomainSnapshotDefPtr def) return -1; } - if (!(origpath = virDomainDiskGetSource(def->dom->disks[i]))) { + if (!(origpath = virDomainDiskGetSource(def->common.dom->disks[i]))) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("cannot generate external snapshot name " "for disk '%s' without source"), @@ -562,7 +560,7 @@ virDomainSnapshotDefAssignExternalNames(virDomainSnapshotDefPtr def) if ((tmp = strrchr(tmppath, '.')) && !strchr(tmp, '/')) *tmp = '\0'; - if (virAsprintf(&disk->src->path, "%s.%s", tmppath, def->name) < 0) { + if (virAsprintf(&disk->src->path, "%s.%s", tmppath, def->common.name) < 0) { VIR_FREE(tmppath); return -1; } @@ -595,7 +593,7 @@ virDomainSnapshotCompareDiskIndex(const void *a, const void *b) return diska->idx - diskb->idx; } -/* Align def->disks to def->domain. Sort the list of def->disks, +/* Align def->disks to def->common.dom. Sort the list of def->disks, * filling in any missing disks or snapshot state defaults given by * the domain, with a fallback to a passed in default. Convert paths * to disk targets for uniformity. Issue an error and return -1 if @@ -612,31 +610,31 @@ virDomainSnapshotAlignDisks(virDomainSnapshotDefPtr def, size_t i; int ndisks; - if (!def->dom) { + if (!def->common.dom) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing domain in snapshot")); goto cleanup; } - if (def->ndisks > def->dom->ndisks) { + if (def->ndisks > def->common.dom->ndisks) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("too many disk snapshot requests for domain")); goto cleanup; } /* Unlikely to have a guest without disks but technically possible. */ - if (!def->dom->ndisks) { + if (!def->common.dom->ndisks) { ret = 0; goto cleanup; } - if (!(map = virBitmapNew(def->dom->ndisks))) + if (!(map = virBitmapNew(def->common.dom->ndisks))) goto cleanup; /* Double check requested disks. */ for (i = 0; i < def->ndisks; i++) { virDomainSnapshotDiskDefPtr disk = &def->disks[i]; - int idx = virDomainDiskIndexByName(def->dom, disk->name, false); + int idx = virDomainDiskIndexByName(def->common.dom, disk->name, false); int disk_snapshot; if (idx < 0) { @@ -654,7 +652,7 @@ virDomainSnapshotAlignDisks(virDomainSnapshotDefPtr def, ignore_value(virBitmapSetBit(map, idx)); disk->idx = idx; - disk_snapshot = def->dom->disks[idx]->snapshot; + disk_snapshot = def->common.dom->disks[idx]->snapshot; if (!disk->snapshot) { if (disk_snapshot && (!require_match || @@ -682,9 +680,9 @@ virDomainSnapshotAlignDisks(virDomainSnapshotDefPtr def, disk->src->path, disk->name); goto cleanup; } - if (STRNEQ(disk->name, def->dom->disks[idx]->dst)) { + if (STRNEQ(disk->name, def->common.dom->disks[idx]->dst)) { VIR_FREE(disk->name); - if (VIR_STRDUP(disk->name, def->dom->disks[idx]->dst) < 0) + if (VIR_STRDUP(disk->name, def->common.dom->disks[idx]->dst) < 0) goto cleanup; } } @@ -692,10 +690,10 @@ virDomainSnapshotAlignDisks(virDomainSnapshotDefPtr def, /* Provide defaults for all remaining disks. */ ndisks = def->ndisks; if (VIR_EXPAND_N(def->disks, def->ndisks, - def->dom->ndisks - def->ndisks) < 0) + def->common.dom->ndisks - def->ndisks) < 0) goto cleanup; - for (i = 0; i < def->dom->ndisks; i++) { + for (i = 0; i < def->common.dom->ndisks; i++) { virDomainSnapshotDiskDefPtr disk; if (virBitmapIsBitSet(map, i)) @@ -703,15 +701,15 @@ virDomainSnapshotAlignDisks(virDomainSnapshotDefPtr def, disk = &def->disks[ndisks++]; if (!(disk->src = virStorageSourceNew())) goto cleanup; - if (VIR_STRDUP(disk->name, def->dom->disks[i]->dst) < 0) + if (VIR_STRDUP(disk->name, def->common.dom->disks[i]->dst) < 0) goto cleanup; disk->idx = i; /* Don't snapshot empty drives */ - if (virStorageSourceIsEmpty(def->dom->disks[i]->src)) + if (virStorageSourceIsEmpty(def->common.dom->disks[i]->src)) disk->snapshot = VIR_DOMAIN_SNAPSHOT_LOCATION_NONE; else - disk->snapshot = def->dom->disks[i]->snapshot; + disk->snapshot = def->common.dom->disks[i]->snapshot; disk->src->type = VIR_STORAGE_TYPE_FILE; if (!disk->snapshot) @@ -802,23 +800,23 @@ virDomainSnapshotDefFormatInternal(virBufferPtr buf, virBufferAddLit(buf, "<domainsnapshot>\n"); virBufferAdjustIndent(buf, 2); - virBufferEscapeString(buf, "<name>%s</name>\n", def->name); - if (def->description) + virBufferEscapeString(buf, "<name>%s</name>\n", def->common.name); + if (def->common.description) virBufferEscapeString(buf, "<description>%s</description>\n", - def->description); + def->common.description); virBufferAsprintf(buf, "<state>%s</state>\n", virDomainSnapshotStateTypeToString(def->state)); - if (def->parent) { + if (def->common.parent) { virBufferAddLit(buf, "<parent>\n"); virBufferAdjustIndent(buf, 2); - virBufferEscapeString(buf, "<name>%s</name>\n", def->parent); + virBufferEscapeString(buf, "<name>%s</name>\n", def->common.parent); virBufferAdjustIndent(buf, -2); virBufferAddLit(buf, "</parent>\n"); } virBufferAsprintf(buf, "<creationTime>%lld</creationTime>\n", - def->creationTime); + def->common.creationTime); if (def->memory) { virBufferAsprintf(buf, "<memory snapshot='%s'", @@ -838,8 +836,8 @@ virDomainSnapshotDefFormatInternal(virBufferPtr buf, virBufferAddLit(buf, "</disks>\n"); } - if (def->dom) { - if (virDomainDefFormatInternal(def->dom, caps, domainflags, buf, + if (def->common.dom) { + if (virDomainDefFormatInternal(def->common.dom, caps, domainflags, buf, xmlopt) < 0) goto error; } else if (uuidstr) { @@ -931,30 +929,30 @@ virDomainSnapshotRedefinePrep(virDomainPtr domain, bool check_if_stolen; /* Prevent circular chains */ - if (def->parent) { - if (STREQ(def->name, def->parent)) { + if (def->common.parent) { + if (STREQ(def->common.name, def->common.parent)) { virReportError(VIR_ERR_INVALID_ARG, _("cannot set snapshot %s as its own parent"), - def->name); + def->common.name); return -1; } - other = virDomainSnapshotFindByName(vm->snapshots, def->parent); + other = virDomainSnapshotFindByName(vm->snapshots, def->common.parent); if (!other) { virReportError(VIR_ERR_INVALID_ARG, _("parent %s for snapshot %s not found"), - def->parent, def->name); + def->common.parent, def->common.name); return -1; } otherdef = virDomainSnapshotObjGetDef(other); - while (otherdef->parent) { - if (STREQ(otherdef->parent, def->name)) { + while (otherdef->common.parent) { + if (STREQ(otherdef->common.parent, def->common.name)) { virReportError(VIR_ERR_INVALID_ARG, _("parent %s would create cycle to %s"), - otherdef->name, def->name); + otherdef->common.name, def->common.name); return -1; } other = virDomainSnapshotFindByName(vm->snapshots, - otherdef->parent); + otherdef->common.parent); if (!other) { VIR_WARN("snapshots are inconsistent for %s", vm->def->name); @@ -963,15 +961,15 @@ virDomainSnapshotRedefinePrep(virDomainPtr domain, } } - other = virDomainSnapshotFindByName(vm->snapshots, def->name); + other = virDomainSnapshotFindByName(vm->snapshots, def->common.name); otherdef = other ? virDomainSnapshotObjGetDef(other) : NULL; - check_if_stolen = other && otherdef->dom; + check_if_stolen = other && otherdef->common.dom; if (virDomainSnapshotRedefineValidate(def, domain->uuid, other, xmlopt, flags) < 0) { /* revert any stealing of the snapshot domain definition */ - if (check_if_stolen && def->dom && !otherdef->dom) { - otherdef->dom = def->dom; - def->dom = NULL; + if (check_if_stolen && def->common.dom && !otherdef->common.dom) { + otherdef->common.dom = def->common.dom; + def->common.dom = NULL; } return -1; } diff --git a/src/conf/virdomainsnapshotobj.c b/src/conf/virdomainsnapshotobj.c index d6b216c7b2..0e3ee012fc 100644 --- a/src/conf/virdomainsnapshotobj.c +++ b/src/conf/virdomainsnapshotobj.c @@ -45,7 +45,7 @@ virDomainSnapshotForEachChild(virDomainSnapshotObjPtr snapshot, while (child) { virDomainSnapshotObjPtr next = child->sibling; - (iter)(child, child->def->name, data); + (iter)(child, child->def->common.name, data); child = next; } diff --git a/src/conf/virdomainsnapshotobjlist.c b/src/conf/virdomainsnapshotobjlist.c index cd3ea569e3..58f094fa02 100644 --- a/src/conf/virdomainsnapshotobjlist.c +++ b/src/conf/virdomainsnapshotobjlist.c @@ -240,10 +240,10 @@ virDomainSnapshotObjPtr virDomainSnapshotAssignDef(virDomainSnapshotObjListPtr s { virDomainSnapshotObjPtr snap; - if (virHashLookup(snapshots->objs, def->name) != NULL) { + if (virHashLookup(snapshots->objs, def->common.name) != NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, _("unexpected domain snapshot %s already exists"), - def->name); + def->common.name); return NULL; } @@ -251,7 +251,7 @@ virDomainSnapshotObjPtr virDomainSnapshotAssignDef(virDomainSnapshotObjListPtr s return NULL; snap->def = def; - if (virHashAddEntry(snapshots->objs, snap->def->name, snap) < 0) { + if (virHashAddEntry(snapshots->objs, snap->def->common.name, snap) < 0) { VIR_FREE(snap); return NULL; } @@ -354,7 +354,7 @@ static int virDomainSnapshotObjListCopyNames(void *payload, return 0; if (data->names && data->count < data->maxnames && - VIR_STRDUP(data->names[data->count], obj->def->name) < 0) { + VIR_STRDUP(data->names[data->count], obj->def->common.name) < 0) { data->error = true; return 0; } @@ -475,7 +475,7 @@ const char * virDomainSnapshotGetCurrentName(virDomainSnapshotObjListPtr snapshots) { if (snapshots->current) - return snapshots->current->def->name; + return snapshots->current->def->common.name; return NULL; } @@ -485,7 +485,8 @@ bool virDomainSnapshotIsCurrentName(virDomainSnapshotObjListPtr snapshots, const char *name) { - return snapshots->current && STREQ(snapshots->current->def->name, name); + return snapshots->current && STREQ(snapshots->current->def->common.name, + name); } @@ -503,7 +504,7 @@ bool virDomainSnapshotObjListRemove(virDomainSnapshotObjListPtr snapshots, virDomainSnapshotObjPtr snapshot) { bool ret = snapshots->current == snapshot; - virHashRemoveEntry(snapshots->objs, snapshot->def->name); + virHashRemoveEntry(snapshots->objs, snapshot->def->common.name); if (ret) snapshots->current = NULL; return ret; @@ -547,18 +548,18 @@ virDomainSnapshotSetRelations(void *payload, virDomainSnapshotObjPtr tmp; virDomainSnapshotObjPtr parent; - parent = virDomainSnapshotFindByName(curr->snapshots, obj->def->parent); + parent = virDomainSnapshotFindByName(curr->snapshots, obj->def->common.parent); if (!parent) { curr->err = -1; parent = &curr->snapshots->metaroot; - VIR_WARN("snapshot %s lacks parent", obj->def->name); + VIR_WARN("snapshot %s lacks parent", obj->def->common.name); } else { tmp = parent; while (tmp && tmp->def) { if (tmp == obj) { curr->err = -1; parent = &curr->snapshots->metaroot; - VIR_WARN("snapshot %s in circular chain", obj->def->name); + VIR_WARN("snapshot %s in circular chain", obj->def->common.name); break; } tmp = tmp->parent; diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c index 1c6a2dcb71..5cf881ae35 100644 --- a/src/esx/esx_driver.c +++ b/src/esx/esx_driver.c @@ -4118,7 +4118,7 @@ esxDomainSnapshotCreateXML(virDomainPtr domain, const char *xmlDesc, priv->parsedUri->autoAnswer) < 0 || esxVI_LookupRootSnapshotTreeList(priv->primary, domain->uuid, &rootSnapshotList) < 0 || - esxVI_GetSnapshotTreeByName(rootSnapshotList, def->name, + esxVI_GetSnapshotTreeByName(rootSnapshotList, def->common.name, &snapshotTree, NULL, esxVI_Occurrence_OptionalItem) < 0) { goto cleanup; @@ -4126,12 +4126,12 @@ esxDomainSnapshotCreateXML(virDomainPtr domain, const char *xmlDesc, if (snapshotTree) { virReportError(VIR_ERR_OPERATION_INVALID, - _("Snapshot '%s' already exists"), def->name); + _("Snapshot '%s' already exists"), def->common.name); goto cleanup; } if (esxVI_CreateSnapshot_Task(priv->primary, virtualMachine->obj, - def->name, def->description, + def->common.name, def->common.description, diskOnly ? esxVI_Boolean_False : esxVI_Boolean_True, quiesce ? esxVI_Boolean_True : esxVI_Boolean_False, &task) < 0 || @@ -4148,7 +4148,7 @@ esxDomainSnapshotCreateXML(virDomainPtr domain, const char *xmlDesc, goto cleanup; } - snapshot = virGetDomainSnapshot(domain, def->name); + snapshot = virGetDomainSnapshot(domain, def->common.name); cleanup: virDomainSnapshotDefFree(def); @@ -4189,12 +4189,12 @@ esxDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot, goto cleanup; } - def.name = virSnapName(snapshot); - def.description = snapshotTree->description; - def.parent = snapshotTreeParent ? snapshotTreeParent->name : NULL; + def.common.name = virSnapName(snapshot); + def.common.description = snapshotTree->description; + def.common.parent = snapshotTreeParent ? snapshotTreeParent->name : NULL; if (esxVI_DateTime_ConvertToCalendarTime(snapshotTree->createTime, - &def.creationTime) < 0) { + &def.common.creationTime) < 0) { goto cleanup; } diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index bc02362495..000da64d0e 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -10859,7 +10859,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, goto error; if (snapshot) - virCommandAddArgList(cmd, "-loadvm", snapshot->def->name, NULL); + virCommandAddArgList(cmd, "-loadvm", snapshot->def->common.name, NULL); if (def->namespaceData) { qemuDomainCmdlineDefPtr qemucmd; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index e693a3b122..8e02f05c3c 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -8477,7 +8477,7 @@ qemuDomainSnapshotWriteMetadata(virDomainObjPtr vm, goto cleanup; } - if (virAsprintf(&snapFile, "%s/%s.xml", snapDir, def->name) < 0) + if (virAsprintf(&snapFile, "%s/%s.xml", snapDir, def->common.name) < 0) goto cleanup; ret = virXMLSaveFile(snapFile, NULL, "snapshot-edit", newxml); @@ -8573,11 +8573,11 @@ qemuDomainSnapshotForEachQcow2(virQEMUDriverPtr driver, /* Prefer action on the disks in use at the time the snapshot was * created; but fall back to current definition if dealing with a * snapshot created prior to libvirt 0.9.5. */ - virDomainDefPtr def = snap->def->dom; + virDomainDefPtr def = snap->def->common.dom; if (!def) def = vm->def; - return qemuDomainSnapshotForEachQcow2Raw(driver, def, snap->def->name, + return qemuDomainSnapshotForEachQcow2Raw(driver, def, snap->def->common.name, op, try_all, def->ndisks); } @@ -8605,30 +8605,30 @@ qemuDomainSnapshotDiscard(virQEMUDriverPtr driver, priv = vm->privateData; qemuDomainObjEnterMonitor(driver, vm); /* we continue on even in the face of error */ - qemuMonitorDeleteSnapshot(priv->mon, snap->def->name); + qemuMonitorDeleteSnapshot(priv->mon, snap->def->common.name); ignore_value(qemuDomainObjExitMonitor(driver, vm)); } } if (virAsprintf(&snapFile, "%s/%s/%s.xml", cfg->snapshotDir, - vm->def->name, snap->def->name) < 0) + vm->def->name, snap->def->common.name) < 0) goto cleanup; if (snap == virDomainSnapshotGetCurrent(vm->snapshots)) { virDomainSnapshotSetCurrent(vm->snapshots, NULL); - if (update_parent && snap->def->parent) { + if (update_parent && snap->def->common.parent) { parentsnap = virDomainSnapshotFindByName(vm->snapshots, - snap->def->parent); + snap->def->common.parent); if (!parentsnap) { VIR_WARN("missing parent snapshot matching name '%s'", - snap->def->parent); + snap->def->common.parent); } else { virDomainSnapshotSetCurrent(vm->snapshots, parentsnap); if (qemuDomainSnapshotWriteMetadata(vm, parentsnap, driver->caps, driver->xmlopt, cfg->snapshotDir) < 0) { VIR_WARN("failed to set parent snapshot '%s' as current", - snap->def->parent); + snap->def->common.parent); virDomainSnapshotSetCurrent(vm->snapshots, NULL); } } diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index eb3d112b69..ece9c9329e 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -14547,7 +14547,7 @@ qemuDomainSnapshotCreateInactiveExternal(virQEMUDriverPtr driver, * create them correctly. */ for (i = 0; i < snap->def->ndisks && !reuse; i++) { snapdisk = &(snap->def->disks[i]); - defdisk = snap->def->dom->disks[snapdisk->idx]; + defdisk = snap->def->common.dom->disks[snapdisk->idx]; if (snapdisk->snapshot != VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL) continue; @@ -14663,7 +14663,7 @@ qemuDomainSnapshotCreateActiveInternal(virQEMUDriverPtr driver, goto cleanup; } - ret = qemuMonitorCreateSnapshot(priv->mon, snap->def->name); + ret = qemuMonitorCreateSnapshot(priv->mon, snap->def->common.name); if (qemuDomainObjExitMonitor(driver, vm) < 0) ret = -1; if (ret < 0) @@ -15726,19 +15726,19 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain, /* reject snapshot names containing slashes or starting with dot as * snapshot definitions are saved in files named by the snapshot name */ if (!(flags & VIR_DOMAIN_SNAPSHOT_CREATE_NO_METADATA)) { - if (strchr(def->name, '/')) { + if (strchr(def->common.name, '/')) { virReportError(VIR_ERR_XML_DETAIL, _("invalid snapshot name '%s': " "name can't contain '/'"), - def->name); + def->common.name); goto cleanup; } - if (def->name[0] == '.') { + if (def->common.name[0] == '.') { virReportError(VIR_ERR_XML_DETAIL, _("invalid snapshot name '%s': " "name can't start with '.'"), - def->name); + def->common.name); goto cleanup; } } @@ -15809,9 +15809,9 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain, * conversion in and back out of xml. */ if (!(xml = qemuDomainDefFormatLive(driver, vm->def, priv->origCPU, true, true)) || - !(def->dom = virDomainDefParseString(xml, caps, driver->xmlopt, NULL, - VIR_DOMAIN_DEF_PARSE_INACTIVE | - VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE))) + !(def->common.dom = virDomainDefParseString(xml, caps, driver->xmlopt, NULL, + VIR_DOMAIN_DEF_PARSE_INACTIVE | + VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE))) goto endjob; if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY) { @@ -15857,7 +15857,7 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain, current = virDomainSnapshotGetCurrent(vm->snapshots); if (current) { if (!redefine && - VIR_STRDUP(snap->def->parent, current->def->name) < 0) + VIR_STRDUP(snap->def->common.parent, current->def->common.name) < 0) goto endjob; if (update_current) { virDomainSnapshotSetCurrent(vm->snapshots, NULL); @@ -15906,7 +15906,7 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain, * do; we've successfully taken the snapshot, and we are now running * on it, so we have to go forward the best we can */ - snapshot = virGetDomainSnapshot(domain, snap->def->name); + snapshot = virGetDomainSnapshot(domain, snap->def->common.name); endjob: if (snapshot && !(flags & VIR_DOMAIN_SNAPSHOT_CREATE_NO_METADATA)) { @@ -15921,11 +15921,11 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain, snapshot = NULL; virReportError(VIR_ERR_INTERNAL_ERROR, _("unable to save metadata for snapshot %s"), - snap->def->name); + snap->def->common.name); virDomainSnapshotObjListRemove(vm->snapshots, snap); } else { other = virDomainSnapshotFindByName(vm->snapshots, - snap->def->parent); + snap->def->common.parent); virDomainSnapshotSetParent(snap, other); } } else if (snap) { @@ -16135,7 +16135,7 @@ qemuDomainSnapshotLookupByName(virDomainPtr domain, if (!(snap = qemuSnapObjFromName(vm, name))) goto cleanup; - snapshot = virGetDomainSnapshot(domain, snap->def->name); + snapshot = virGetDomainSnapshot(domain, snap->def->common.name); cleanup: virDomainObjEndAPI(&vm); @@ -16185,14 +16185,14 @@ qemuDomainSnapshotGetParent(virDomainSnapshotPtr snapshot, if (!(snap = qemuSnapObjFromSnapshot(vm, snapshot))) goto cleanup; - if (!snap->def->parent) { + if (!snap->def->common.parent) { virReportError(VIR_ERR_NO_DOMAIN_SNAPSHOT, _("snapshot '%s' does not have a parent"), - snap->def->name); + snap->def->common.name); goto cleanup; } - parent = virGetDomainSnapshot(virSnapDom(snapshot), snap->def->parent); + parent = virGetDomainSnapshot(virSnapDom(snapshot), snap->def->common.parent); cleanup: virDomainObjEndAPI(&vm); @@ -16417,10 +16417,10 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot, } if (!(flags & VIR_DOMAIN_SNAPSHOT_REVERT_FORCE)) { - if (!snap->def->dom) { + if (!snap->def->common.dom) { virReportError(VIR_ERR_SNAPSHOT_REVERT_RISKY, _("snapshot '%s' lacks domain '%s' rollback info"), - snap->def->name, vm->def->name); + snap->def->common.name, vm->def->name); goto endjob; } if (virDomainObjIsActive(vm) && @@ -16450,8 +16450,8 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot, * * XXX Should domain snapshots track live xml rather * than inactive xml? */ - if (snap->def->dom) { - config = virDomainDefCopy(snap->def->dom, caps, + if (snap->def->common.dom) { + config = virDomainDefCopy(snap->def->common.dom, caps, driver->xmlopt, NULL, true); if (!config) goto endjob; @@ -16557,7 +16557,7 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot, if (qemuDomainObjEnterMonitorAsync(driver, vm, QEMU_ASYNC_JOB_START) < 0) goto endjob; - rc = qemuMonitorLoadSnapshot(priv->mon, snap->def->name); + rc = qemuMonitorLoadSnapshot(priv->mon, snap->def->common.name); if (qemuDomainObjExitMonitor(driver, vm) < 0) goto endjob; if (rc < 0) { @@ -16774,10 +16774,10 @@ qemuDomainSnapshotReparentChildren(void *payload, if (rep->err < 0) return 0; - VIR_FREE(snap->def->parent); + VIR_FREE(snap->def->common.parent); if (rep->parent->def && - VIR_STRDUP(snap->def->parent, rep->parent->def->name) < 0) { + VIR_STRDUP(snap->def->common.parent, rep->parent->def->common.name) < 0) { rep->err = -1; return 0; } @@ -16858,7 +16858,7 @@ qemuDomainSnapshotDelete(virDomainSnapshotPtr snapshot, cfg->snapshotDir) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("failed to set snapshot '%s' as current"), - snap->def->name); + snap->def->common.name); virDomainSnapshotSetCurrent(vm->snapshots, NULL); goto endjob; } diff --git a/src/test/test_driver.c b/src/test/test_driver.c index d3b76bfdbd..0caed1de19 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -6132,7 +6132,7 @@ testDomainSnapshotLookupByName(virDomainPtr domain, if (!(snap = testSnapObjFromName(vm, name))) goto cleanup; - snapshot = virGetDomainSnapshot(domain, snap->def->name); + snapshot = virGetDomainSnapshot(domain, snap->def->common.name); cleanup: virDomainObjEndAPI(&vm); @@ -6173,14 +6173,14 @@ testDomainSnapshotGetParent(virDomainSnapshotPtr snapshot, if (!(snap = testSnapObjFromSnapshot(vm, snapshot))) goto cleanup; - if (!snap->def->parent) { + if (!snap->def->common.parent) { virReportError(VIR_ERR_NO_DOMAIN_SNAPSHOT, _("snapshot '%s' does not have a parent"), - snap->def->name); + snap->def->common.name); goto cleanup; } - parent = virGetDomainSnapshot(virSnapDom(snapshot), snap->def->parent); + parent = virGetDomainSnapshot(virSnapDom(snapshot), snap->def->common.parent); cleanup: virDomainObjEndAPI(&vm); @@ -6207,7 +6207,7 @@ testDomainSnapshotCurrent(virDomainPtr domain, goto cleanup; } - snapshot = virGetDomainSnapshot(domain, current->def->name); + snapshot = virGetDomainSnapshot(domain, current->def->common.name); cleanup: virDomainObjEndAPI(&vm); @@ -6376,11 +6376,11 @@ testDomainSnapshotCreateXML(virDomainPtr domain, &update_current, flags) < 0) goto cleanup; } else { - if (!(def->dom = virDomainDefCopy(vm->def, - privconn->caps, - privconn->xmlopt, - NULL, - true))) + if (!(def->common.dom = virDomainDefCopy(vm->def, + privconn->caps, + privconn->xmlopt, + NULL, + true))) goto cleanup; if (testDomainSnapshotAlignDisks(vm, def, flags) < 0) @@ -6394,7 +6394,7 @@ testDomainSnapshotCreateXML(virDomainPtr domain, } if (!redefine) { - if (VIR_STRDUP(snap->def->parent, + if (VIR_STRDUP(snap->def->common.parent, virDomainSnapshotGetCurrentName(vm->snapshots)) < 0) goto cleanup; @@ -6407,7 +6407,7 @@ testDomainSnapshotCreateXML(virDomainPtr domain, } } - snapshot = virGetDomainSnapshot(domain, snap->def->name); + snapshot = virGetDomainSnapshot(domain, snap->def->common.name); cleanup: if (vm) { if (snapshot) { @@ -6415,7 +6415,7 @@ testDomainSnapshotCreateXML(virDomainPtr domain, if (update_current) virDomainSnapshotSetCurrent(vm->snapshots, snap); other = virDomainSnapshotFindByName(vm->snapshots, - snap->def->parent); + snap->def->common.parent); virDomainSnapshotSetParent(snap, other); } virDomainObjEndAPI(&vm); @@ -6464,10 +6464,10 @@ testDomainSnapshotReparentChildren(void *payload, if (rep->err < 0) return 0; - VIR_FREE(snap->def->parent); + VIR_FREE(snap->def->common.parent); if (rep->parent->def && - VIR_STRDUP(snap->def->parent, rep->parent->def->name) < 0) { + VIR_STRDUP(snap->def->common.parent, rep->parent->def->common.name) < 0) { rep->err = -1; return 0; } @@ -6522,12 +6522,12 @@ testDomainSnapshotDelete(virDomainSnapshotPtr snapshot, } else { virDomainSnapshotDropParent(snap); if (snap == virDomainSnapshotGetCurrent(vm->snapshots)) { - if (snap->def->parent) { + if (snap->def->common.parent) { parentsnap = virDomainSnapshotFindByName(vm->snapshots, - snap->def->parent); + snap->def->common.parent); if (!parentsnap) VIR_WARN("missing parent snapshot matching name '%s'", - snap->def->parent); + snap->def->common.parent); } virDomainSnapshotSetCurrent(vm->snapshots, parentsnap); } @@ -6588,10 +6588,10 @@ testDomainRevertToSnapshot(virDomainSnapshotPtr snapshot, } if (!(flags & VIR_DOMAIN_SNAPSHOT_REVERT_FORCE)) { - if (!snap->def->dom) { + if (!snap->def->common.dom) { virReportError(VIR_ERR_SNAPSHOT_REVERT_RISKY, _("snapshot '%s' lacks domain '%s' rollback info"), - snap->def->name, vm->def->name); + snap->def->common.name, vm->def->name); goto cleanup; } if (virDomainObjIsActive(vm) && @@ -6607,7 +6607,7 @@ testDomainRevertToSnapshot(virDomainSnapshotPtr snapshot, virDomainSnapshotSetCurrent(vm->snapshots, NULL); - config = virDomainDefCopy(snap->def->dom, privconn->caps, + config = virDomainDefCopy(snap->def->common.dom, privconn->caps, privconn->xmlopt, NULL, true); if (!config) goto cleanup; diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 2ca12a28e5..fb8fc3a10c 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -4814,7 +4814,7 @@ vboxSnapshotRedefine(virDomainPtr dom, * read-only disks are in the redefined snapshot's media registry (the disks need to * be open to query their uuid). */ - for (it = 0; it < def->dom->ndisks; it++) { + for (it = 0; it < def->common.dom->ndisks; it++) { int diskInMediaRegistry = 0; IMedium *readOnlyMedium = NULL; PRUnichar *locationUtf = NULL; @@ -4828,7 +4828,7 @@ vboxSnapshotRedefine(virDomainPtr dom, VBOX_IID_INITIALIZE(&iid); VBOX_IID_INITIALIZE(&parentiid); diskInMediaRegistry = virVBoxSnapshotConfDiskIsInMediaRegistry(snapshotMachineDesc, - def->dom->disks[it]->src->path); + def->common.dom->disks[it]->src->path); if (diskInMediaRegistry == -1) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Unable to know if disk is in media registry")); @@ -4838,7 +4838,7 @@ vboxSnapshotRedefine(virDomainPtr dom, continue; /*The read only disk is not in the media registry*/ - VBOX_UTF8_TO_UTF16(def->dom->disks[it]->src->path, &locationUtf); + VBOX_UTF8_TO_UTF16(def->common.dom->disks[it]->src->path, &locationUtf); rc = gVBoxAPI.UIVirtualBox.OpenMedium(data->vboxObj, locationUtf, DeviceType_HardDisk, @@ -4911,7 +4911,7 @@ vboxSnapshotRedefine(virDomainPtr dom, readOnlyDisk->format = format; readOnlyDisk->uuid = uuid; - if (VIR_STRDUP(readOnlyDisk->location, def->dom->disks[it]->src->path) < 0) { + if (VIR_STRDUP(readOnlyDisk->location, def->common.dom->disks[it]->src->path) < 0) { VIR_FREE(readOnlyDisk); goto cleanup; } @@ -5016,12 +5016,12 @@ vboxSnapshotRedefine(virDomainPtr dom, goto cleanup; VIR_DEBUG("New snapshot UUID: %s", newSnapshotPtr->uuid); - if (VIR_STRDUP(newSnapshotPtr->name, def->name) < 0) + if (VIR_STRDUP(newSnapshotPtr->name, def->common.name) < 0) goto cleanup; - newSnapshotPtr->timeStamp = virTimeStringThen(def->creationTime * 1000); + newSnapshotPtr->timeStamp = virTimeStringThen(def->common.creationTime * 1000); - if (VIR_STRDUP(newSnapshotPtr->description, def->description) < 0) + if (VIR_STRDUP(newSnapshotPtr->description, def->common.description) < 0) goto cleanup; if (VIR_STRDUP(newSnapshotPtr->hardware, snapshotMachineDesc->hardware) < 0) @@ -5031,12 +5031,12 @@ vboxSnapshotRedefine(virDomainPtr dom, goto cleanup; /*We get the parent disk uuid from the parent disk location to correctly fill the storage controller.*/ - for (it = 0; it < def->dom->ndisks; it++) { + for (it = 0; it < def->common.dom->ndisks; it++) { char *location = NULL; const char *uuidReplacing = NULL; char *tmp = NULL; - location = def->dom->disks[it]->src->path; + location = def->common.dom->disks[it]->src->path; if (!location) goto cleanup; /*Replacing the uuid*/ @@ -5064,7 +5064,7 @@ vboxSnapshotRedefine(virDomainPtr dom, VIR_FREE(tmp); } - if (virVBoxSnapshotConfAddSnapshotToXmlMachine(newSnapshotPtr, snapshotMachineDesc, def->parent) < 0) { + if (virVBoxSnapshotConfAddSnapshotToXmlMachine(newSnapshotPtr, snapshotMachineDesc, def->common.parent) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Unable to add the snapshot to the machine description")); goto cleanup; @@ -5084,10 +5084,10 @@ vboxSnapshotRedefine(virDomainPtr dom, * Open the snapshot's read-write disk's full ancestry to allow opening the * read-write disk itself. */ - for (it = 0; it < def->dom->ndisks; it++) { + for (it = 0; it < def->common.dom->ndisks; it++) { char *location = NULL; - location = def->dom->disks[it]->src->path; + location = def->common.dom->disks[it]->src->path; if (!location) goto cleanup; @@ -5231,7 +5231,7 @@ vboxSnapshotRedefine(virDomainPtr dom, } } else { /*Create a "fake" disk to avoid corrupting children snapshot disks.*/ - for (it = 0; it < def->dom->ndisks; it++) { + for (it = 0; it < def->common.dom->ndisks; it++) { IMedium *medium = NULL; PRUnichar *locationUtf16 = NULL; char *parentUuid = NULL; @@ -5247,7 +5247,7 @@ vboxSnapshotRedefine(virDomainPtr dom, VBOX_IID_INITIALIZE(&iid); VBOX_IID_INITIALIZE(&parentiid); - VBOX_UTF8_TO_UTF16(def->dom->disks[it]->src->path, &locationUtf16); + VBOX_UTF8_TO_UTF16(def->common.dom->disks[it]->src->path, &locationUtf16); rc = gVBoxAPI.UIVirtualBox.OpenMedium(data->vboxObj, locationUtf16, DeviceType_HardDisk, @@ -5396,8 +5396,8 @@ vboxSnapshotRedefine(virDomainPtr dom, * All the snapshot structure manipulation is done, we close the disks we have * previously opened. */ - for (it = 0; it < def->dom->ndisks; it++) { - char *location = def->dom->disks[it]->src->path; + for (it = 0; it < def->common.dom->ndisks; it++) { + char *location = def->common.dom->disks[it]->src->path; if (!location) goto cleanup; @@ -5516,7 +5516,7 @@ vboxDomainSnapshotCreateXML(virDomainPtr dom, if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE) { if (vboxSnapshotRedefine(dom, def, isCurrent) < 0) goto cleanup; - ret = virGetDomainSnapshot(dom, def->name); + ret = virGetDomainSnapshot(dom, def->common.name); goto cleanup; } } @@ -5543,14 +5543,14 @@ vboxDomainSnapshotCreateXML(virDomainPtr dom, goto cleanup; } - VBOX_UTF8_TO_UTF16(def->name, &name); + VBOX_UTF8_TO_UTF16(def->common.name, &name); if (!name) { virReportOOMError(); goto cleanup; } - if (def->description) { - VBOX_UTF8_TO_UTF16(def->description, &description); + if (def->common.description) { + VBOX_UTF8_TO_UTF16(def->common.description, &description); if (!description) { virReportOOMError(); goto cleanup; @@ -5580,7 +5580,7 @@ vboxDomainSnapshotCreateXML(virDomainPtr dom, goto cleanup; } - ret = virGetDomainSnapshot(dom, def->name); + ret = virGetDomainSnapshot(dom, def->common.name); cleanup: VBOX_RELEASE(progress); @@ -5984,7 +5984,7 @@ vboxSnapshotGetReadOnlyDisks(virDomainSnapshotDefPtr def, vboxArray mediumAttachments = VBOX_ARRAY_INITIALIZER; size_t i = 0, diskCount = 0, sdCount = 0; int ret = -1; - virDomainDefPtr defdom = def->dom; + virDomainDefPtr defdom = def->common.dom; if (!data->vboxObj) return ret; @@ -6223,10 +6223,10 @@ static char *vboxDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot, if (!(snap = vboxDomainSnapshotGet(data, dom, machine, virSnapName(snapshot)))) goto cleanup; - if (VIR_ALLOC(def) < 0 || !(def->dom = virDomainDefNew())) + if (VIR_ALLOC(def) < 0 || !(def->common.dom = virDomainDefNew())) goto cleanup; - defdom = def->dom; - if (VIR_STRDUP(def->name, virSnapName(snapshot)) < 0) + defdom = def->common.dom; + if (VIR_STRDUP(def->common.name, virSnapName(snapshot)) < 0) goto cleanup; if (gVBoxAPI.vboxSnapshotRedefine) { @@ -6274,7 +6274,7 @@ static char *vboxDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot, if (str16) { VBOX_UTF16_TO_UTF8(str16, &str8); VBOX_UTF16_FREE(str16); - if (VIR_STRDUP(def->description, str8) < 0) { + if (VIR_STRDUP(def->common.description, str8) < 0) { VBOX_UTF8_FREE(str8); goto cleanup; } @@ -6289,7 +6289,7 @@ static char *vboxDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot, goto cleanup; } /* timestamp is in milliseconds while creationTime in seconds */ - def->creationTime = timestamp / 1000; + def->common.creationTime = timestamp / 1000; rc = gVBoxAPI.UISnapshot.GetParent(snap, &parent); if (NS_FAILED(rc)) { @@ -6308,7 +6308,7 @@ static char *vboxDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot, } VBOX_UTF16_TO_UTF8(str16, &str8); VBOX_UTF16_FREE(str16); - if (VIR_STRDUP(def->parent, str8) < 0) { + if (VIR_STRDUP(def->common.parent, str8) < 0) { VBOX_UTF8_FREE(str8); goto cleanup; } @@ -6990,7 +6990,7 @@ vboxDomainSnapshotDeleteMetadataOnly(virDomainSnapshotPtr snapshot) goto cleanup; } - isCurrent = virVBoxSnapshotConfIsCurrentSnapshot(snapshotMachineDesc, def->name); + isCurrent = virVBoxSnapshotConfIsCurrentSnapshot(snapshotMachineDesc, def->common.name); if (isCurrent < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Unable to know if the snapshot is the current snapshot")); @@ -7002,8 +7002,8 @@ vboxDomainSnapshotDeleteMetadataOnly(virDomainSnapshotPtr snapshot) * disks. The first thing to do is to manipulate VirtualBox API to create * differential read-write disks if the parent snapshot is not null. */ - if (def->parent != NULL) { - for (it = 0; it < def->dom->ndisks; it++) { + if (def->common.parent != NULL) { + for (it = 0; it < def->common.dom->ndisks; it++) { virVBoxSnapshotConfHardDiskPtr readOnly = NULL; IMedium *medium = NULL; PRUnichar *locationUtf16 = NULL; @@ -7023,7 +7023,7 @@ vboxDomainSnapshotDeleteMetadataOnly(virDomainSnapshotPtr snapshot) VBOX_IID_INITIALIZE(&iid); VBOX_IID_INITIALIZE(&parentiid); readOnly = virVBoxSnapshotConfHardDiskPtrByLocation(snapshotMachineDesc, - def->dom->disks[it]->src->path); + def->common.dom->disks[it]->src->path); if (!readOnly) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Cannot get hard disk by location")); @@ -7061,7 +7061,7 @@ vboxDomainSnapshotDeleteMetadataOnly(virDomainSnapshotPtr snapshot) VBOX_UTF8_TO_UTF16("VDI", &formatUtf16); if (virAsprintf(&newLocationUtf8, "%sfakedisk-%s-%d.vdi", - machineLocationPath, def->parent, it) < 0) + machineLocationPath, def->common.parent, it) < 0) goto cleanup; VBOX_UTF8_TO_UTF16(newLocationUtf8, &newLocation); rc = gVBoxAPI.UIVirtualBox.CreateHardDisk(data->vboxObj, @@ -7159,15 +7159,15 @@ vboxDomainSnapshotDeleteMetadataOnly(virDomainSnapshotPtr snapshot) } } } else { - for (it = 0; it < def->dom->ndisks; it++) { + for (it = 0; it < def->common.dom->ndisks; it++) { const char *uuidRO = NULL; char *tmp = NULL; uuidRO = virVBoxSnapshotConfHardDiskUuidByLocation(snapshotMachineDesc, - def->dom->disks[it]->src->path); + def->common.dom->disks[it]->src->path); if (!uuidRO) { virReportError(VIR_ERR_INTERNAL_ERROR, _("No such disk in media registry %s"), - def->dom->disks[it]->src->path); + def->common.dom->disks[it]->src->path); goto cleanup; } @@ -7212,14 +7212,14 @@ vboxDomainSnapshotDeleteMetadataOnly(virDomainSnapshotPtr snapshot) } } /*If the parent snapshot is not NULL, we remove the-read only disks from the media registry*/ - if (def->parent != NULL) { - for (it = 0; it < def->dom->ndisks; it++) { + if (def->common.parent != NULL) { + for (it = 0; it < def->common.dom->ndisks; it++) { const char *uuidRO = virVBoxSnapshotConfHardDiskUuidByLocation(snapshotMachineDesc, - def->dom->disks[it]->src->path); + def->common.dom->disks[it]->src->path); if (!uuidRO) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("Unable to find UUID for location %s"), def->dom->disks[it]->src->path); + _("Unable to find UUID for location %s"), def->common.dom->disks[it]->src->path); goto cleanup; } if (virVBoxSnapshotConfRemoveHardDisk(snapshotMachineDesc->mediaRegistry, uuidRO) < 0) { @@ -7284,16 +7284,16 @@ vboxDomainSnapshotDeleteMetadataOnly(virDomainSnapshotPtr snapshot) } /*removing the snapshot*/ - if (virVBoxSnapshotConfRemoveSnapshot(snapshotMachineDesc, def->name) < 0) { + if (virVBoxSnapshotConfRemoveSnapshot(snapshotMachineDesc, def->common.name) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("Unable to remove snapshot %s"), def->name); + _("Unable to remove snapshot %s"), def->common.name); goto cleanup; } if (isCurrent) { VIR_FREE(snapshotMachineDesc->currentSnapshot); - if (def->parent != NULL) { - virVBoxSnapshotConfSnapshotPtr snap = virVBoxSnapshotConfSnapshotByName(snapshotMachineDesc->snapshot, def->parent); + if (def->common.parent != NULL) { + virVBoxSnapshotConfSnapshotPtr snap = virVBoxSnapshotConfSnapshotByName(snapshotMachineDesc->snapshot, def->common.parent); if (!snap) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Unable to get the snapshot to remove")); -- 2.20.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list