mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-25 12:52:19 +00:00
snapshot: detect when qemu lacks disk-snapshot support
Noticed when testing new libvirt against old qemu that lacked the snapshot_blkdev HMP command. Libvirt was mistakenly treating the command as successful, and re-writing the domain XML to use the just-created 0-byte file, rendering the domain broken on restart. * src/qemu/qemu_monitor_text.c (qemuMonitorTextDiskSnapshot): Notice another possible error message. * src/qemu/qemu_driver.c (qemuDomainSnapshotCreateSingleDiskActive): Don't keep 0-byte file on failure.
This commit is contained in:
parent
94f776e716
commit
dad15a2e02
@ -9027,7 +9027,6 @@ qemuDomainSnapshotCreateSingleDiskActive(struct qemud_driver *driver,
|
|||||||
VIR_WARN("Unable to release lock on %s", source);
|
VIR_WARN("Unable to release lock on %s", source);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
need_unlink = false;
|
|
||||||
|
|
||||||
disk->src = origsrc;
|
disk->src = origsrc;
|
||||||
origsrc = NULL;
|
origsrc = NULL;
|
||||||
@ -9041,6 +9040,7 @@ qemuDomainSnapshotCreateSingleDiskActive(struct qemud_driver *driver,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
/* Update vm in place to match changes. */
|
/* Update vm in place to match changes. */
|
||||||
|
need_unlink = false;
|
||||||
VIR_FREE(disk->src);
|
VIR_FREE(disk->src);
|
||||||
disk->src = source;
|
disk->src = source;
|
||||||
source = NULL;
|
source = NULL;
|
||||||
|
@ -3064,7 +3064,8 @@ qemuMonitorTextDiskSnapshot(qemuMonitorPtr mon, const char *device,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strstr(reply, "error while creating qcow2") != NULL) {
|
if (strstr(reply, "error while creating qcow2") != NULL ||
|
||||||
|
strstr(reply, "unknown command:") != NULL) {
|
||||||
qemuReportError(VIR_ERR_OPERATION_FAILED,
|
qemuReportError(VIR_ERR_OPERATION_FAILED,
|
||||||
_("Failed to take snapshot: %s"), reply);
|
_("Failed to take snapshot: %s"), reply);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user