mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-20 06:50:22 +03:00
qemu: fix excluding disk from internal inactive snapshot
'qemuDomainSnapshotForEachQcow2Raw' doesn't properly handle the 'VIR_DOMAIN_SNAPSHOT_LOCATION_NONE' setting and thus doesn't skip disks which were excluded from the snapshot due to being read-only. Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com> Reviewed-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
parent
540df80d99
commit
096e3c72ec
@ -6860,11 +6860,12 @@ qemuDomainSnapshotWriteMetadata(virDomainObj *vm,
|
||||
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;
|
||||
@ -6877,11 +6878,12 @@ qemuDomainSnapshotForEachQcow2Raw(virQEMUDriver *driver,
|
||||
|
||||
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)) {
|
||||
@ -6903,7 +6905,7 @@ qemuDomainSnapshotForEachQcow2Raw(virQEMUDriver *driver,
|
||||
} 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,
|
||||
@ -6923,7 +6925,7 @@ qemuDomainSnapshotForEachQcow2Raw(virQEMUDriver *driver,
|
||||
} 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;
|
||||
@ -6942,7 +6944,7 @@ qemuDomainSnapshotForEachQcow2(virQEMUDriver *driver,
|
||||
const char *op,
|
||||
bool try_all)
|
||||
{
|
||||
return qemuDomainSnapshotForEachQcow2Raw(driver, def, snap->def->name,
|
||||
return qemuDomainSnapshotForEachQcow2Raw(driver, def, snap,
|
||||
op, try_all, def->ndisks);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user