VIR_DOMAIN_SAVE_RUNNING = 1 << 1, /* Favor running over paused (Since: 0.9.5) */
VIR_DOMAIN_SAVE_PAUSED = 1 << 2, /* Favor paused over running (Since: 0.9.5) */
VIR_DOMAIN_SAVE_RESET_NVRAM = 1 << 3, /* Re-initialize NVRAM from template (Since: 8.1.0) */
- VIR_DOMAIN_SAVE_PARALLEL = 1 << 4, /* Save and restore using parallel channels (Since: 10.6.0) */
} virDomainSaveRestoreFlags;
int virDomainSave (virDomainPtr domain,
virCheckFlags(VIR_DOMAIN_SAVE_BYPASS_CACHE |
VIR_DOMAIN_SAVE_RUNNING |
- VIR_DOMAIN_SAVE_PAUSED |
- VIR_DOMAIN_SAVE_PARALLEL, -1);
+ VIR_DOMAIN_SAVE_PAUSED, -1);
if (virTypedParamsValidate(params, nparams,
VIR_DOMAIN_SAVE_PARAM_FILE,
virCheckFlags(VIR_DOMAIN_SAVE_BYPASS_CACHE |
VIR_DOMAIN_SAVE_RUNNING |
VIR_DOMAIN_SAVE_PAUSED |
- VIR_DOMAIN_SAVE_RESET_NVRAM |
- VIR_DOMAIN_SAVE_PARALLEL, -1);
+ VIR_DOMAIN_SAVE_RESET_NVRAM, -1);
if (flags & VIR_DOMAIN_SAVE_RESET_NVRAM)
reset_nvram = true;
unsigned int flags)
{
g_autoptr(qemuMigrationParams) saveParams = NULL;
+ int nchannels = 0;
+ int rv;
- if (flags & VIR_DOMAIN_SAVE_PARALLEL && !sparse) {
+ if ((rv = virTypedParamsGetInt(params, nparams,
+ VIR_DOMAIN_SAVE_PARAM_PARALLEL_CHANNELS,
+ &nchannels)) < 0)
+ return NULL;
+
+ if (rv == 1 && !sparse) {
virReportError(VIR_ERR_INVALID_ARG, "%s",
_("Parallel save is only supported with the 'sparse' save image format"));
return NULL;
+ } else if (rv == 0) {
+ nchannels = 1;
}
if (!(saveParams = qemuMigrationParamsNew()))
if (virBitmapSetBit(saveParams->caps, QEMU_MIGRATION_CAP_MULTIFD) < 0)
return NULL;
- if (flags & VIR_DOMAIN_SAVE_PARALLEL) {
- int nchannels;
-
- if (params && virTypedParamsGetInt(params, nparams,
- VIR_DOMAIN_SAVE_PARAM_PARALLEL_CHANNELS,
- &nchannels) < 0)
- return NULL;
-
- if (nchannels < 1) {
- virReportError(VIR_ERR_INVALID_ARG, "%s",
- _("number of parallel save channels cannot be less than 1"));
- return NULL;
- }
-
- saveParams->params[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS].value.i = nchannels;
- } else {
- saveParams->params[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS].value.i = 1;
+ if (nchannels < 1) {
+ virReportError(VIR_ERR_INVALID_ARG, "%s",
+ _("number of parallel save channels cannot be less than 1"));
+ return NULL;
}
+
+ saveParams->params[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS].value.i = nchannels;
saveParams->params[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS].set = true;
if (flags & VIR_DOMAIN_SAVE_BYPASS_CACHE) {
if ((rc = vshCommandOptInt(ctl, cmd, "parallel-channels", &nchannels)) < 0)
goto out;
- if (rc == 1) {
- if (virTypedParamsAddInt(¶ms, &nparams, &maxparams,
- VIR_DOMAIN_SAVE_PARAM_PARALLEL_CHANNELS, nchannels) < 0)
- goto out;
-
- flags |= VIR_DOMAIN_SAVE_PARALLEL;
- }
+ if (rc == 1 &&
+ virTypedParamsAddInt(¶ms, &nparams, &maxparams,
+ VIR_DOMAIN_SAVE_PARAM_PARALLEL_CHANNELS, nchannels) < 0)
+ goto out;
if (vshCommandOptString(ctl, cmd, "xml", &xmlfile) < 0)
goto out;
if ((rc = vshCommandOptInt(ctl, cmd, "parallel-channels", &nchannels)) < 0)
return false;
- if (rc == 1) {
- if (virTypedParamsAddInt(¶ms, &nparams, &maxparams,
- VIR_DOMAIN_SAVE_PARAM_PARALLEL_CHANNELS, nchannels) < 0)
- return false;
-
- flags |= VIR_DOMAIN_SAVE_PARALLEL;
- }
+ if (rc == 1 &&
+ virTypedParamsAddInt(¶ms, &nparams, &maxparams,
+ VIR_DOMAIN_SAVE_PARAM_PARALLEL_CHANNELS, nchannels) < 0)
+ return false;
if (flags || xml) {
rc = virDomainRestoreParams(priv->conn, params, nparams, flags);