diff options
author | Fabiano Rosas <farosas@suse.de> | 2023-09-18 14:28:20 -0300 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@redhat.com> | 2023-09-27 13:58:02 -0400 |
commit | d50f5dc075cbb891bfe4a9378600a4871264468a (patch) | |
tree | 3256e23ad8c80ae9a0416763ec653671ea1d5960 /migration | |
parent | b3b101157d4651f12e6b3361af2de6bace7f9b4a (diff) | |
download | qemu-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.c | 29 |
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)) { |