With the latest KVM I'm having some issues with save/restore, but I
think it's a kvm issue and not libvirt. The problems did expose a
libvirt bug, though; patch below.
-jim
---
A failed restore of a configured VM would leave the migration source
set incorrectly, preventing the VM from being started normally.
Always clear migration source, then deal with failures.
src/qemu_driver.c | 12 ++++++------
1 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index 87b66ad..bff17b0 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -2083,6 +2083,7 @@ static int qemudDomainRestore(virConnectPtr conn,
struct qemud_vm_def *def;
struct qemud_vm *vm;
int fd;
+ int ret;
char *xml;
struct qemud_save_header header;
@@ -2161,18 +2162,17 @@ static int qemudDomainRestore(virConnectPtr conn,
/* Set the migration source and start it up. */
snprintf(vm->migrateFrom, sizeof(vm->migrateFrom), "stdio");
vm->stdin = fd;
-
- if (qemudStartVMDaemon(conn, driver, vm) < 0) {
+ ret = qemudStartVMDaemon(conn, driver, vm);
+ close(fd);
+ vm->migrateFrom[0] = '\0';
+ vm->stdin = -1;
+ if (ret < 0) {
qemudReportError(conn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
"failed to start VM");
if (!vm->configFile[0])
qemudRemoveInactiveVM(driver, vm);
- close(fd);
return -1;
}
- close(fd);
- vm->migrateFrom[0] = '\0';
- vm->stdin = -1;
/* If it was running before, resume it now. */
if (header.was_running) {
--
1.5.3.rc4