From 0de75e855b0c37a7ef25370b19cabad34e679ce6 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Wed, 10 Aug 2011 08:51:36 -0600 Subject: [PATCH] managedsave: prohibit use on transient domains Transient domains reject attempts to set autostart, and using virDomainCreate to restart a domain only works on persistent domains. Therefore, managed save makes no sense on transient domains, and should be rejected up front rather than creating an otherwise unrecoverable managed save file. Besides, transient domains imply that a lot more management is being done by the upper layer; this includes the assumption that the upper layer is okay managing the saved state file created by virDomainSave, and does not need to use managed save. * src/libvirt.c: Document that transient domains are incompatible with managed save. * src/qemu/qemu_driver.c (qemuDomainManagedSave): Enforce it. * src/libxl/libxl_driver.c (libxlDomainManagedSave): Likewise. --- src/libvirt.c | 3 +++ src/libxl/libxl_driver.c | 5 +++++ src/qemu/qemu_driver.c | 5 +++++ 3 files changed, 13 insertions(+) diff --git a/src/libvirt.c b/src/libvirt.c index c154c7d144..c8af3e1e81 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -15285,6 +15285,9 @@ error: * the saved state itself, and will reuse it once the domain is being * restarted (automatically or via an explicit libvirt call). * As a result any running domain is sure to not have a managed saved image. + * This also implies that managed save only works on persistent domains, + * since the domain must still exist in order to use virDomainCreate() to + * restart it. * * If @flags includes VIR_DOMAIN_SAVE_BYPASS_CACHE, then libvirt will * attempt to bypass the file system cache while creating the file, or diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index 7cb362065b..516148f740 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -2132,6 +2132,11 @@ libxlDomainManagedSave(virDomainPtr dom, unsigned int flags) libxlError(VIR_ERR_OPERATION_INVALID, "%s", _("Domain is not running")); goto cleanup; } + if (!vm->persistent) { + libxlError(VIR_ERR_OPERATION_INVALID, "%s", + _("cannot do managed save for transient domain")); + goto cleanup; + } name = libxlDomainManagedSavePath(driver, vm); if (name == NULL) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 0d6470da65..19e749f1eb 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -2582,6 +2582,11 @@ qemuDomainManagedSave(virDomainPtr dom, unsigned int flags) "%s", _("domain is not running")); goto cleanup; } + if (!vm->persistent) { + qemuReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("cannot do managed save for transient domain")); + goto cleanup; + } name = qemuDomainManagedSavePath(driver, vm); if (name == NULL) -- 2.47.2