static int
qemuMigrationSetCompression(virQEMUDriverPtr driver,
virDomainObjPtr vm,
+ bool state,
qemuDomainAsyncJob job)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
if (ret < 0) {
goto cleanup;
+ } else if (ret == 0 && !state) {
+ /* Unsupported but we want it off anyway */
+ goto cleanup;
} else if (ret == 0) {
if (job == QEMU_ASYNC_JOB_MIGRATION_IN) {
virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
ret = qemuMonitorSetMigrationCapability(
priv->mon,
- QEMU_MONITOR_MIGRATION_CAPS_XBZRLE);
+ QEMU_MONITOR_MIGRATION_CAPS_XBZRLE,
+ state);
cleanup:
qemuDomainObjExitMonitor(driver, vm);
static int
qemuMigrationSetAutoConverge(virQEMUDriverPtr driver,
virDomainObjPtr vm,
+ bool state,
qemuDomainAsyncJob job)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
if (ret < 0) {
goto cleanup;
+ } else if (ret == 0 && !state) {
+ /* Unsupported but we want it off anyway */
+ goto cleanup;
} else if (ret == 0) {
virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
_("Auto-Converge is not supported by "
ret = qemuMonitorSetMigrationCapability(
priv->mon,
- QEMU_MONITOR_MIGRATION_CAPS_AUTO_CONVERGE);
+ QEMU_MONITOR_MIGRATION_CAPS_AUTO_CONVERGE,
+ state);
cleanup:
qemuDomainObjExitMonitor(driver, vm);
static int
qemuMigrationSetPinAll(virQEMUDriverPtr driver,
virDomainObjPtr vm,
+ bool state,
qemuDomainAsyncJob job)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
if (ret < 0) {
goto cleanup;
+ } else if (ret == 0 && !state) {
+ /* Unsupported but we want it off anyway */
+ goto cleanup;
} else if (ret == 0) {
if (job == QEMU_ASYNC_JOB_MIGRATION_IN) {
virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
ret = qemuMonitorSetMigrationCapability(
priv->mon,
- QEMU_MONITOR_MIGRATION_CAPS_RDMA_PIN_ALL);
+ QEMU_MONITOR_MIGRATION_CAPS_RDMA_PIN_ALL,
+ state);
cleanup:
qemuDomainObjExitMonitor(driver, vm);
dataFD[1] = -1; /* 'st' owns the FD now & will close it */
}
- if (flags & VIR_MIGRATE_COMPRESSED &&
- qemuMigrationSetCompression(driver, vm,
+ if (qemuMigrationSetCompression(driver, vm,
+ flags & VIR_MIGRATE_COMPRESSED,
QEMU_ASYNC_JOB_MIGRATION_IN) < 0)
goto stop;
goto stop;
}
- if (flags & VIR_MIGRATE_RDMA_PIN_ALL &&
- qemuMigrationSetPinAll(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN) < 0)
+ if (qemuMigrationSetPinAll(driver, vm,
+ flags & VIR_MIGRATE_RDMA_PIN_ALL,
+ QEMU_ASYNC_JOB_MIGRATION_IN) < 0)
goto stop;
if (mig->lockState) {
goto cleanup;
}
- if (flags & VIR_MIGRATE_COMPRESSED &&
- qemuMigrationSetCompression(driver, vm,
+ if (qemuMigrationSetCompression(driver, vm,
+ flags & VIR_MIGRATE_COMPRESSED,
QEMU_ASYNC_JOB_MIGRATION_OUT) < 0)
goto cleanup;
- if (flags & VIR_MIGRATE_AUTO_CONVERGE &&
- qemuMigrationSetAutoConverge(driver, vm,
+ if (qemuMigrationSetAutoConverge(driver, vm,
+ flags & VIR_MIGRATE_AUTO_CONVERGE,
QEMU_ASYNC_JOB_MIGRATION_OUT) < 0)
goto cleanup;
- if (flags & VIR_MIGRATE_RDMA_PIN_ALL &&
- qemuMigrationSetPinAll(driver, vm,
+ if (qemuMigrationSetPinAll(driver, vm,
+ flags & VIR_MIGRATE_RDMA_PIN_ALL,
QEMU_ASYNC_JOB_MIGRATION_OUT) < 0)
goto cleanup;