Signed-off-by: Claudio Fontana <cfontana(a)suse.de>
---
src/qemu/qemu_driver.c | 59 ++++++++++++++++++++++++++++++++++++------
1 file changed, 51 insertions(+), 8 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index c341df5f8e..7a4e64a118 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -5811,12 +5811,13 @@ static int qemuNodeGetSecurityModel(virConnectPtr conn,
return 0;
}
-
static int
-qemuDomainRestoreFlags(virConnectPtr conn,
- const char *path,
- const char *dxml,
- unsigned int flags)
+qemuDomainRestoreInternal(virConnectPtr conn,
+ const char *path,
+ const char *dxml,
+ int nchannels G_GNUC_UNUSED,
+ unsigned int flags,
+ int (*ensureACL)(virConnectPtr, virDomainDef *))
{
virQEMUDriver *driver = conn->privateData;
qemuDomainObjPrivate *priv = NULL;
@@ -5834,7 +5835,8 @@ qemuDomainRestoreFlags(virConnectPtr conn,
virCheckFlags(VIR_DOMAIN_SAVE_BYPASS_CACHE |
VIR_DOMAIN_SAVE_RUNNING |
VIR_DOMAIN_SAVE_PAUSED |
- VIR_DOMAIN_SAVE_RESET_NVRAM, -1);
+ VIR_DOMAIN_SAVE_RESET_NVRAM |
+ VIR_DOMAIN_SAVE_PARALLEL, -1);
if (flags & VIR_DOMAIN_SAVE_RESET_NVRAM)
reset_nvram = true;
@@ -5845,7 +5847,7 @@ qemuDomainRestoreFlags(virConnectPtr conn,
if (fd < 0)
goto cleanup;
- if (virDomainRestoreFlagsEnsureACL(conn, def) < 0)
+ if (ensureACL(conn, def) < 0)
goto cleanup;
if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) {
@@ -5913,11 +5915,51 @@ qemuDomainRestoreFlags(virConnectPtr conn,
return ret;
}
+static int
+qemuDomainRestoreFlags(virConnectPtr conn,
+ const char *path,
+ const char *dxml,
+ unsigned int flags)
+{
+ return qemuDomainRestoreInternal(conn, path, dxml, -1, flags,
+ virDomainRestoreFlagsEnsureACL);
+}
+
static int
qemuDomainRestore(virConnectPtr conn,
const char *path)
{
- return qemuDomainRestoreFlags(conn, path, NULL, 0);
+ return qemuDomainRestoreInternal(conn, path, NULL, -1, 0,
+ virDomainRestoreEnsureACL);
+}
+
+static int
+qemuDomainRestoreParametersFlags(virConnectPtr conn,
+ virTypedParameterPtr params, int nparams,
+ unsigned int flags)
+{
+ const char *path = NULL;
+ const char *dxml = NULL;
+ int ret = -1;
+ int nchannels = 2;
+
+ if (virTypedParamsValidate(params, nparams,
+ VIR_SAVE_PARAM_FILE, VIR_TYPED_PARAM_STRING,
+ VIR_SAVE_PARAM_DXML, VIR_TYPED_PARAM_STRING,
+ VIR_SAVE_PARAM_PARALLEL_CONNECTIONS, VIR_TYPED_PARAM_INT,
+ NULL) < 0)
+ return -1;
+
+ if (virTypedParamsGetString(params, nparams, VIR_SAVE_PARAM_FILE, &path) < 0)
+ return -1;
+ if (virTypedParamsGetString(params, nparams, VIR_SAVE_PARAM_DXML, &dxml) < 0)
+ return -1;
+ if (virTypedParamsGetInt(params, nparams, VIR_SAVE_PARAM_PARALLEL_CONNECTIONS,
&nchannels) < 0)
+ return -1;
+
+ ret = qemuDomainRestoreInternal(conn, path, dxml, nchannels, flags,
+ virDomainRestoreParametersFlagsEnsureACL);
+ return ret;
}
static char *
@@ -20884,6 +20926,7 @@ static virHypervisorDriver qemuHypervisorDriver = {
.domainSaveParametersFlags = qemuDomainSaveParametersFlags, /* 8.3.0 */
.domainRestore = qemuDomainRestore, /* 0.2.0 */
.domainRestoreFlags = qemuDomainRestoreFlags, /* 0.9.4 */
+ .domainRestoreParametersFlags = qemuDomainRestoreParametersFlags, /* 8.3.0 */
.domainSaveImageGetXMLDesc = qemuDomainSaveImageGetXMLDesc, /* 0.9.4 */
.domainSaveImageDefineXML = qemuDomainSaveImageDefineXML, /* 0.9.4 */
.domainCoreDump = qemuDomainCoreDump, /* 0.7.0 */
--
2.34.1