@@ -113,10 +113,22 @@ static void secondary_vm_do_failover(void)
}
}
+static void colo_set_filter_status(const char *status, Error **errp)
+{
+ struct COLOListNode *e, *next;
+ NetFilterState *nf;
+
+ QLIST_FOREACH_SAFE(e, &COLOBufferFilters, node, next) {
+ nf = e->opaque;
+ object_property_set_str(OBJECT(nf), status, "status", errp);
+ }
+}
+
static void primary_vm_do_failover(void)
{
MigrationState *s = migrate_get_current();
int old_state;
+ Error *local_err = NULL;
migrate_set_state(&s->state, MIGRATION_STATUS_COLO,
MIGRATION_STATUS_COMPLETED);
@@ -140,6 +152,12 @@ static void primary_vm_do_failover(void)
old_state);
return;
}
+
+ colo_set_filter_status("disable", &local_err);
+ if (local_err) {
+ error_report_err(local_err);
+ }
+
/* Notify COLO thread that failover work is finished */
qemu_sem_post(&s->colo_sem);
}
@@ -440,6 +458,11 @@ static void colo_process_checkpoint(MigrationState *s)
failover_init_state();
+ colo_set_filter_status("enable", &local_err);
+ if (local_err) {
+ goto out;
+ }
+
s->rp_state.from_dst_file = qemu_file_get_return_path(s->to_dst_file);
if (!s->rp_state.from_dst_file) {
error_report("Open QEMUFile from_dst_file failed");
Enable all buffer filters that added by COLO while go into COLO process, and disable them while exit COLO. Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com> Cc: Jason Wang <jasowang@redhat.com> Cc: Yang Hongyang <hongyang.yang@easystack.cn> --- v15: - Re-implement colo_set_filter_status() based on COLOBufferFilters list. - Fix the title of this patch --- migration/colo.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)