static int
qemuDomainSnapshotForEachQcow2Raw(virQEMUDriver *driver,
virDomainDef *def,
- const char *name,
+ virDomainMomentObj *snap,
const char *op,
bool try_all,
int ndisks)
{
+ virDomainSnapshotDef *snapdef = virDomainSnapshotObjGetDef(snap);
const char *qemuimgbin;
size_t i;
bool skipped = false;
for (i = 0; i < ndisks; i++) {
g_autoptr(virCommand) cmd = virCommandNewArgList(qemuimgbin, "snapshot",
- op, name, NULL);
+ op, snap->def->name, NULL);
int format = virDomainDiskGetFormat(def->disks[i]);
/* FIXME: we also need to handle LVM here */
- if (def->disks[i]->device != VIR_DOMAIN_DISK_DEVICE_DISK)
+ if (def->disks[i]->device != VIR_DOMAIN_DISK_DEVICE_DISK ||
+ snapdef->disks[i].snapshot == VIR_DOMAIN_SNAPSHOT_LOCATION_NONE)
continue;
if (!virStorageSourceIsLocalStorage(def->disks[i]->src)) {
} else if (STREQ(op, "-c") && i) {
/* We must roll back partial creation by deleting
* all earlier snapshots. */
- qemuDomainSnapshotForEachQcow2Raw(driver, def, name,
+ qemuDomainSnapshotForEachQcow2Raw(driver, def, snap,
"-d", false, i);
}
virReportError(VIR_ERR_OPERATION_INVALID,
} else if (STREQ(op, "-c") && i) {
/* We must roll back partial creation by deleting
* all earlier snapshots. */
- qemuDomainSnapshotForEachQcow2Raw(driver, def, name,
+ qemuDomainSnapshotForEachQcow2Raw(driver, def, snap,
"-d", false, i);
}
return -1;
const char *op,
bool try_all)
{
- return qemuDomainSnapshotForEachQcow2Raw(driver, def, snap->def->name,
+ return qemuDomainSnapshotForEachQcow2Raw(driver, def, snap,
op, try_all, def->ndisks);
}