summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/migration/migration.h3
-rw-r--r--migration/block.c17
-rw-r--r--migration/colo.c4
-rw-r--r--migration/migration.c3
-rw-r--r--migration/savevm.c8
5 files changed, 11 insertions, 24 deletions
diff --git a/include/migration/migration.h b/include/migration/migration.h
index 024a048ee4..4dedc66a48 100644
--- a/include/migration/migration.h
+++ b/include/migration/migration.h
@@ -39,8 +39,7 @@
#define QEMU_VM_SECTION_FOOTER 0x7e
struct MigrationParams {
- bool blk;
- bool shared;
+ bool unused; /* C doesn't allow empty structs */
};
/* Messages sent on the return path from destination to source */
diff --git a/migration/block.c b/migration/block.c
index 060087fa32..5d229264bf 100644
--- a/migration/block.c
+++ b/migration/block.c
@@ -94,9 +94,6 @@ typedef struct BlkMigBlock {
} BlkMigBlock;
typedef struct BlkMigState {
- /* Written during setup phase. Can be read without a lock. */
- int blk_enable;
- int shared_base;
QSIMPLEQ_HEAD(bmds_list, BlkMigDevState) bmds_list;
int64_t total_sector_sum;
bool zero_blocks;
@@ -425,7 +422,7 @@ static int init_blk_migration(QEMUFile *f)
bmds->bulk_completed = 0;
bmds->total_sectors = sectors;
bmds->completed_sectors = 0;
- bmds->shared_base = block_mig_state.shared_base;
+ bmds->shared_base = migrate_use_block_incremental();
assert(i < num_bs);
bmds_bs[i].bmds = bmds;
@@ -994,22 +991,12 @@ static int block_load(QEMUFile *f, void *opaque, int version_id)
return 0;
}
-static void block_set_params(const MigrationParams *params, void *opaque)
-{
- block_mig_state.blk_enable = params->blk;
- block_mig_state.shared_base = params->shared;
-
- /* shared base means that blk_enable = 1 */
- block_mig_state.blk_enable |= params->shared;
-}
-
static bool block_is_active(void *opaque)
{
- return block_mig_state.blk_enable == 1;
+ return migrate_use_block();
}
static SaveVMHandlers savevm_block_handlers = {
- .set_params = block_set_params,
.save_live_setup = block_save_setup,
.save_live_iterate = block_save_iterate,
.save_live_complete_precopy = block_save_complete,
diff --git a/migration/colo.c b/migration/colo.c
index 963c80256d..8c86892246 100644
--- a/migration/colo.c
+++ b/migration/colo.c
@@ -14,6 +14,7 @@
#include "qemu/timer.h"
#include "sysemu/sysemu.h"
#include "migration/colo.h"
+#include "migration/block.h"
#include "io/channel-buffer.h"
#include "trace.h"
#include "qemu/error-report.h"
@@ -345,8 +346,7 @@ static int colo_do_checkpoint_transaction(MigrationState *s,
}
/* Disable block migration */
- s->params.blk = 0;
- s->params.shared = 0;
+ migrate_set_block_enabled(false, &local_err);
qemu_savevm_state_header(fb);
qemu_savevm_state_begin(fb, &s->params);
qemu_mutex_lock_iothread();
diff --git a/migration/migration.c b/migration/migration.c
index c13c0a293e..b3d300d181 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1224,9 +1224,6 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
MigrationParams params;
const char *p;
- params.blk = has_blk && blk;
- params.shared = has_inc && inc;
-
if (migration_is_setup_or_active(s->state) ||
s->state == MIGRATION_STATUS_CANCELLING ||
s->state == MIGRATION_STATUS_COLO) {
diff --git a/migration/savevm.c b/migration/savevm.c
index f5e81948e6..2f1f4eb547 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -1233,8 +1233,6 @@ static int qemu_savevm_state(QEMUFile *f, Error **errp)
{
int ret;
MigrationParams params = {
- .blk = 0,
- .shared = 0
};
MigrationState *ms = migrate_init(&params);
MigrationStatus status;
@@ -1245,6 +1243,12 @@ static int qemu_savevm_state(QEMUFile *f, Error **errp)
goto done;
}
+ if (migrate_use_block()) {
+ error_setg(errp, "Block migration and snapshots are incompatible");
+ ret = -EINVAL;
+ goto done;
+ }
+
qemu_mutex_unlock_iothread();
qemu_savevm_state_header(f);
qemu_savevm_state_begin(f, &params);