aboutsummaryrefslogtreecommitdiff
path: root/migration
diff options
context:
space:
mode:
authorFabiano Rosas <farosas@suse.de>2023-09-18 14:28:20 -0300
committerStefan Hajnoczi <stefanha@redhat.com>2023-09-27 13:58:02 -0400
commitd50f5dc075cbb891bfe4a9378600a4871264468a (patch)
tree3256e23ad8c80ae9a0416763ec653671ea1d5960 /migration
parentb3b101157d4651f12e6b3361af2de6bace7f9b4a (diff)
downloadqemu-d50f5dc075cbb891bfe4a9378600a4871264468a.zip
qemu-d50f5dc075cbb891bfe4a9378600a4871264468a.tar.gz
qemu-d50f5dc075cbb891bfe4a9378600a4871264468a.tar.bz2
migration: Consolidate return path closing code
We'll start calling the await_return_path_close_on_source() function from other parts of the code, so move all of the related checks and tracepoints into it. Reviewed-by: Peter Xu <peterx@redhat.com> Signed-off-by: Fabiano Rosas <farosas@suse.de> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Message-ID: <20230918172822.19052-7-farosas@suse.de>
Diffstat (limited to 'migration')
-rw-r--r--migration/migration.c29
1 files changed, 14 insertions, 15 deletions
diff --git a/migration/migration.c b/migration/migration.c
index 4372b0f..f6c0250 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2061,6 +2061,14 @@ static int open_return_path_on_source(MigrationState *ms,
/* Returns 0 if the RP was ok, otherwise there was an error on the RP */
static int await_return_path_close_on_source(MigrationState *ms)
{
+ int ret;
+
+ if (!ms->rp_state.rp_thread_created) {
+ return 0;
+ }
+
+ trace_migration_return_path_end_before();
+
/*
* If this is a normal exit then the destination will send a SHUT
* and the rp_thread will exit, however if there's an error we
@@ -2078,7 +2086,10 @@ static int await_return_path_close_on_source(MigrationState *ms)
qemu_thread_join(&ms->rp_state.rp_thread);
ms->rp_state.rp_thread_created = false;
trace_await_return_path_close_on_source_close();
- return ms->rp_state.error;
+
+ ret = ms->rp_state.error;
+ trace_migration_return_path_end_after(ret);
+ return ret;
}
static inline void
@@ -2374,20 +2385,8 @@ static void migration_completion(MigrationState *s)
goto fail;
}
- /*
- * If rp was opened we must clean up the thread before
- * cleaning everything else up (since if there are no failures
- * it will wait for the destination to send it's status in
- * a SHUT command).
- */
- if (s->rp_state.rp_thread_created) {
- int rp_error;
- trace_migration_return_path_end_before();
- rp_error = await_return_path_close_on_source(s);
- trace_migration_return_path_end_after(rp_error);
- if (rp_error) {
- goto fail;
- }
+ if (await_return_path_close_on_source(s)) {
+ goto fail;
}
if (qemu_file_get_error(s->to_dst_file)) {