mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-07-07 18:35:46 +00: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
|
static int
|
||||||
qemuDomainSnapshotForEachQcow2Raw(virQEMUDriver *driver,
|
qemuDomainSnapshotForEachQcow2Raw(virQEMUDriver *driver,
|
||||||
virDomainDef *def,
|
virDomainDef *def,
|
||||||
const char *name,
|
virDomainMomentObj *snap,
|
||||||
const char *op,
|
const char *op,
|
||||||
bool try_all,
|
bool try_all,
|
||||||
int ndisks)
|
int ndisks)
|
||||||
{
|
{
|
||||||
|
virDomainSnapshotDef *snapdef = virDomainSnapshotObjGetDef(snap);
|
||||||
const char *qemuimgbin;
|
const char *qemuimgbin;
|
||||||
size_t i;
|
size_t i;
|
||||||
bool skipped = false;
|
bool skipped = false;
|
||||||
@ -6877,11 +6878,12 @@ qemuDomainSnapshotForEachQcow2Raw(virQEMUDriver *driver,
|
|||||||
|
|
||||||
for (i = 0; i < ndisks; i++) {
|
for (i = 0; i < ndisks; i++) {
|
||||||
g_autoptr(virCommand) cmd = virCommandNewArgList(qemuimgbin, "snapshot",
|
g_autoptr(virCommand) cmd = virCommandNewArgList(qemuimgbin, "snapshot",
|
||||||
op, name, NULL);
|
op, snap->def->name, NULL);
|
||||||
int format = virDomainDiskGetFormat(def->disks[i]);
|
int format = virDomainDiskGetFormat(def->disks[i]);
|
||||||
|
|
||||||
/* FIXME: we also need to handle LVM here */
|
/* 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;
|
continue;
|
||||||
|
|
||||||
if (!virStorageSourceIsLocalStorage(def->disks[i]->src)) {
|
if (!virStorageSourceIsLocalStorage(def->disks[i]->src)) {
|
||||||
@ -6903,7 +6905,7 @@ qemuDomainSnapshotForEachQcow2Raw(virQEMUDriver *driver,
|
|||||||
} else if (STREQ(op, "-c") && i) {
|
} else if (STREQ(op, "-c") && i) {
|
||||||
/* We must roll back partial creation by deleting
|
/* We must roll back partial creation by deleting
|
||||||
* all earlier snapshots. */
|
* all earlier snapshots. */
|
||||||
qemuDomainSnapshotForEachQcow2Raw(driver, def, name,
|
qemuDomainSnapshotForEachQcow2Raw(driver, def, snap,
|
||||||
"-d", false, i);
|
"-d", false, i);
|
||||||
}
|
}
|
||||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
virReportError(VIR_ERR_OPERATION_INVALID,
|
||||||
@ -6923,7 +6925,7 @@ qemuDomainSnapshotForEachQcow2Raw(virQEMUDriver *driver,
|
|||||||
} else if (STREQ(op, "-c") && i) {
|
} else if (STREQ(op, "-c") && i) {
|
||||||
/* We must roll back partial creation by deleting
|
/* We must roll back partial creation by deleting
|
||||||
* all earlier snapshots. */
|
* all earlier snapshots. */
|
||||||
qemuDomainSnapshotForEachQcow2Raw(driver, def, name,
|
qemuDomainSnapshotForEachQcow2Raw(driver, def, snap,
|
||||||
"-d", false, i);
|
"-d", false, i);
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
@ -6942,7 +6944,7 @@ qemuDomainSnapshotForEachQcow2(virQEMUDriver *driver,
|
|||||||
const char *op,
|
const char *op,
|
||||||
bool try_all)
|
bool try_all)
|
||||||
{
|
{
|
||||||
return qemuDomainSnapshotForEachQcow2Raw(driver, def, snap->def->name,
|
return qemuDomainSnapshotForEachQcow2Raw(driver, def, snap,
|
||||||
op, try_all, def->ndisks);
|
op, try_all, def->ndisks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user