static int
qemuDomainManagedSaveHelper(virQEMUDriver *driver,
virDomainObj *vm,
+ const char *dxml,
unsigned int flags)
{
g_autoptr(virQEMUDriverConfig) cfg = NULL;
VIR_INFO("Saving state of domain '%s' to '%s'", vm->def->name, path);
if (qemuDomainSaveInternal(driver, vm, path, compressed,
- compressor, NULL, flags) < 0)
+ compressor, dxml, flags) < 0)
return -1;
vm->hasManagedSave = true;
static int
qemuDomainSaveParams(virDomainPtr dom,
- virTypedParameterPtr params, int nparams,
+ virTypedParameterPtr params,
+ int nparams,
unsigned int flags)
{
+ virQEMUDriver *driver = dom->conn->privateData;
+ g_autoptr(virQEMUDriverConfig) cfg = NULL;
+ virDomainObj *vm = NULL;
+ g_autoptr(virCommand) compressor = NULL;
const char *to = NULL;
const char *dxml = NULL;
- virQEMUDriver *driver = dom->conn->privateData;
int compressed;
- g_autoptr(virCommand) compressor = NULL;
int ret = -1;
- virDomainObj *vm = NULL;
- g_autoptr(virQEMUDriverConfig) cfg = NULL;
virCheckFlags(VIR_DOMAIN_SAVE_BYPASS_CACHE |
VIR_DOMAIN_SAVE_RUNNING |
VIR_DOMAIN_SAVE_PARAM_DXML, &dxml) < 0)
return -1;
- cfg = virQEMUDriverGetConfig(driver);
- if ((compressed = qemuSaveImageGetCompressionProgram(cfg->saveImageFormat,
- &compressor,
- "save", false)) < 0)
- goto cleanup;
-
if (!(vm = qemuDomainObjFromDomain(dom)))
goto cleanup;
if (virDomainSaveParamsEnsureACL(dom->conn, vm->def) < 0)
goto cleanup;
+ if (!to) {
+ /* If no save path was provided then this behaves as managed save. */
+ return qemuDomainManagedSaveHelper(driver, vm, dxml, flags);
+ }
+
+ cfg = virQEMUDriverGetConfig(driver);
+ if ((compressed = qemuSaveImageGetCompressionProgram(cfg->saveImageFormat,
+ &compressor,
+ "save", false)) < 0)
+ goto cleanup;
+
if (virDomainObjCheckActive(vm) < 0)
goto cleanup;
if (virDomainManagedSaveEnsureACL(dom->conn, vm->def) < 0)
goto cleanup;
- ret = qemuDomainManagedSaveHelper(driver, vm, flags);
+ ret = qemuDomainManagedSaveHelper(driver, vm, NULL, flags);
cleanup:
virDomainObjEndAPI(&vm);