/**
* qemuSnapshotForEachQcow2:
*
+ * @driver: qemu driver configuration
* @def: domain definition
* @snap: snapshot object
* @op: 'qemu-img snapshot' operation flag, one of "-c", "-d", "-a"
* permissive modes.
*/
static int
-qemuSnapshotForEachQcow2(virDomainDef *def,
+qemuSnapshotForEachQcow2(virQEMUDriver *driver,
+ virDomainDef *def,
virDomainMomentObj *snap,
const char *op)
{
if (virStorageSourceIsLocalStorage(nvram) &&
nvram->format == VIR_STORAGE_FILE_QCOW2) {
+ if (create) {
+ /* Ensure that the NVRAM image exists; e.g. when snapshotting
+ * a VM directly after defining it */
+ if (qemuPrepareNVRAM(driver, def, false) < 0) {
+ nrollback = def->ndisks;
+ virErrorPreserveLast(&orig_err);
+ goto rollback;
+ }
+ }
+
if (qemuSnapshotForEachQcow2One(nvram, op, snap->def->name) < 0) {
if (create) {
nrollback = def->ndisks;
qemuSnapshotCreateInactiveInternal(virDomainObj *vm,
virDomainMomentObj *snap)
{
- return qemuSnapshotForEachQcow2(vm->def, snap, "-c");
+ return qemuSnapshotForEachQcow2(QEMU_DOMAIN_PRIVATE(vm)->driver,
+ vm->def, snap, "-c");
}
}
/* Try all disks, but report failure if we skipped any. */
- if (qemuSnapshotForEachQcow2(def, snap, "-a") != 0)
+ if (qemuSnapshotForEachQcow2(QEMU_DOMAIN_PRIVATE(vm)->driver,
+ def, snap, "-a") != 0)
return -1;
return 0;
if (qemuSnapshotDiscardExternal(vm, snap, externalData) < 0)
return -1;
} else {
- if (qemuSnapshotForEachQcow2(def, snap, "-d") < 0)
+ if (qemuSnapshotForEachQcow2(QEMU_DOMAIN_PRIVATE(vm)->driver,
+ def, snap, "-d") < 0)
return -1;
}
} else {