From dad15a2e0213d3cd7b611632ccba77b165083b32 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Tue, 18 Oct 2011 15:28:47 -0600 Subject: [PATCH] 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. --- src/qemu/qemu_driver.c | 2 +- src/qemu/qemu_monitor_text.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index f833655b8a..84ef4dd078 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -9027,7 +9027,6 @@ qemuDomainSnapshotCreateSingleDiskActive(struct qemud_driver *driver, VIR_WARN("Unable to release lock on %s", source); goto cleanup; } - need_unlink = false; disk->src = origsrc; origsrc = NULL; @@ -9041,6 +9040,7 @@ qemuDomainSnapshotCreateSingleDiskActive(struct qemud_driver *driver, goto cleanup; /* Update vm in place to match changes. */ + need_unlink = false; VIR_FREE(disk->src); disk->src = source; source = NULL; diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c index 2f31d990e9..4774df9986 100644 --- a/src/qemu/qemu_monitor_text.c +++ b/src/qemu/qemu_monitor_text.c @@ -3064,7 +3064,8 @@ qemuMonitorTextDiskSnapshot(qemuMonitorPtr mon, const char *device, 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, _("Failed to take snapshot: %s"), reply); goto cleanup;