mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 21:34:54 +03:00
snapshot: sanity check when reusing file for snapshot
The snapshot code when reusing an existing file had hard-to-read logic, as well as a missing sanity check: REUSE_EXT should require the destination to already be present. * src/qemu/qemu_driver.c (qemuDomainSnapshotDiskPrepare): Require destination on REUSE_EXT, rename variable for legibility.
This commit is contained in:
parent
23a4df886d
commit
33eaebe48e
@ -10705,12 +10705,12 @@ qemuDomainSnapshotDiskPrepare(virDomainObjPtr vm, virDomainSnapshotDefPtr def,
|
||||
bool found = false;
|
||||
bool active = virDomainObjIsActive(vm);
|
||||
struct stat st;
|
||||
bool allow_reuse = (*flags & VIR_DOMAIN_SNAPSHOT_CREATE_REUSE_EXT) != 0;
|
||||
bool reuse = (*flags & VIR_DOMAIN_SNAPSHOT_CREATE_REUSE_EXT) != 0;
|
||||
bool atomic = (*flags & VIR_DOMAIN_SNAPSHOT_CREATE_ATOMIC) != 0;
|
||||
int external = 0;
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
|
||||
if (allow_reuse && !qemuCapsGet(priv->caps, QEMU_CAPS_TRANSACTION)) {
|
||||
if (reuse && !qemuCapsGet(priv->caps, QEMU_CAPS_TRANSACTION)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("reuse is not supported with this QEMU binary"));
|
||||
goto cleanup;
|
||||
@ -10759,8 +10759,13 @@ qemuDomainSnapshotDiskPrepare(virDomainObjPtr vm, virDomainSnapshotDefPtr def,
|
||||
_("unable to stat for disk %s: %s"),
|
||||
disk->name, disk->file);
|
||||
goto cleanup;
|
||||
} else if (reuse) {
|
||||
virReportSystemError(errno,
|
||||
_("missing existing file for disk %s: %s"),
|
||||
disk->name, disk->file);
|
||||
goto cleanup;
|
||||
}
|
||||
} else if (!(S_ISBLK(st.st_mode) || !st.st_size || allow_reuse)) {
|
||||
} else if (!S_ISBLK(st.st_mode) && st.st_size && !reuse) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("external snapshot file for disk %s already "
|
||||
"exists and is not a block device: %s"),
|
||||
|
Loading…
Reference in New Issue
Block a user