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>
This commit is contained in:
parent
b3b101157d
commit
d50f5dc075
@ -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)) {
|
||||
|
Loading…
Reference in New Issue
Block a user