Register a cpr-luo migration notifier that closes an active source LUO session after migration failure.
Signed-off-by: Dongli Zhang <[email protected]> --- include/migration/cpr.h | 1 + migration/cpr-luo-stub.c | 4 ++++ migration/cpr-luo.c | 20 ++++++++++++++++++++ migration/migration.c | 1 + 4 files changed, 26 insertions(+) diff --git a/include/migration/cpr.h b/include/migration/cpr.h index 96529ab3a1..239cddf352 100644 --- a/include/migration/cpr.h +++ b/include/migration/cpr.h @@ -97,5 +97,6 @@ bool cpr_luo_retrieve_fds(Error **errp); bool cpr_luo_save(QEMUFile *f, Error **errp); QEMUFile *cpr_luo_load(Error **errp); void cpr_luo_incoming_finish(void); +void cpr_luo_init(void); void cpr_luo_abort(void); #endif diff --git a/migration/cpr-luo-stub.c b/migration/cpr-luo-stub.c index 22a7037c20..4eb14ccbbc 100644 --- a/migration/cpr-luo-stub.c +++ b/migration/cpr-luo-stub.c @@ -69,6 +69,10 @@ void cpr_luo_incoming_finish(void) { } +void cpr_luo_init(void) +{ +} + void cpr_luo_abort(void) { } diff --git a/migration/cpr-luo.c b/migration/cpr-luo.c index d9aba3bfc5..02ca947507 100644 --- a/migration/cpr-luo.c +++ b/migration/cpr-luo.c @@ -11,6 +11,7 @@ #include "io/channel-file.h" #include "linux-headers/linux/liveupdate.h" #include "migration/cpr.h" +#include "migration/migration.h" #include "migration/qemu-file.h" #include "qapi/error.h" #include "qemu/error-report.h" @@ -296,6 +297,25 @@ void cpr_luo_incoming_finish(void) cpr_state.luo_session_fd = -1; } +static int cpr_luo_notifier(NotifierWithReturn *notifier, + MigrationEvent *e, Error **errp) +{ + + if (e->type == MIG_EVENT_FAILED && cpr_state.luo_session_fd >= 0) { + cpr_luo_abort(); + } + + return 0; +} + +void cpr_luo_init(void) +{ + static NotifierWithReturn luo_notifier; + + migration_add_notifier_mode(&luo_notifier, cpr_luo_notifier, + MIG_MODE_CPR_LUO); +} + void cpr_luo_abort(void) { int session_fd = cpr_state.luo_session_fd; diff --git a/migration/migration.c b/migration/migration.c index 7c2bb982a5..a9503607d5 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -340,6 +340,7 @@ void migration_object_init(void) ram_mig_init(); dirty_bitmap_mig_init(); cpr_exec_init(); + cpr_luo_init(); /* Initialize cpu throttle timers */ cpu_throttle_init(); -- 2.43.5
