5f95659303
- kvm-migration-Fix-race-that-dest-preempt-thread-close-to.patch [RHEL-11219] - kvm-migration-Fix-possible-race-when-setting-rp_state.er.patch [RHEL-11219] - kvm-migration-Fix-possible-races-when-shutting-down-the-.patch [RHEL-11219] - kvm-migration-Fix-possible-race-when-shutting-down-to_ds.patch [RHEL-11219] - kvm-migration-Remove-redundant-cleanup-of-postcopy_qemuf.patch [RHEL-11219] - kvm-migration-Consolidate-return-path-closing-code.patch [RHEL-11219] - kvm-migration-Replace-the-return-path-retry-logic.patch [RHEL-11219] - kvm-migration-Move-return-path-cleanup-to-main-migration.patch [RHEL-11219] - kvm-file-posix-Clear-bs-bl.zoned-on-error.patch [RHEL-7360] - kvm-file-posix-Check-bs-bl.zoned-for-zone-info.patch [RHEL-7360] - kvm-file-posix-Fix-zone-update-in-I-O-error-path.patch [RHEL-7360] - kvm-file-posix-Simplify-raw_co_prw-s-out-zone-code.patch [RHEL-7360] - kvm-tests-file-io-error-New-test.patch [RHEL-7360] - Resolves: RHEL-11219 (migration tests failing for RHEL 9.4 sometimes) - Resolves: RHEL-7360 (Qemu Core Dumped When Writing Larger Size Than The Size of A Data Disk)
87 lines
3.0 KiB
Diff
87 lines
3.0 KiB
Diff
From 33f0f63da753fff2a3d2bf14542abe0665878e3d Mon Sep 17 00:00:00 2001
|
|
From: Fabiano Rosas <farosas@suse.de>
|
|
Date: Mon, 18 Sep 2023 14:28:20 -0300
|
|
Subject: [PATCH 06/13] migration: Consolidate return path closing code
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
RH-Author: Peter Xu <peterx@redhat.com>
|
|
RH-MergeRequest: 203: migration: Fix race that dest preempt thread close too early
|
|
RH-Jira: RHEL-11219
|
|
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
RH-Acked-by: Leonardo Brás <leobras@redhat.com>
|
|
RH-Commit: [6/8] d3a4e08e1f1afe92afac12a3404a84d1c23e0f02 (peterx/qemu-kvm)
|
|
|
|
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>
|
|
(cherry picked from commit d50f5dc075cbb891bfe4a9378600a4871264468a)
|
|
Signed-off-by: Peter Xu <peterx@redhat.com>
|
|
---
|
|
migration/migration.c | 29 ++++++++++++++---------------
|
|
1 file changed, 14 insertions(+), 15 deletions(-)
|
|
|
|
diff --git a/migration/migration.c b/migration/migration.c
|
|
index e2e4a7d8ae..ac4541b971 100644
|
|
--- a/migration/migration.c
|
|
+++ b/migration/migration.c
|
|
@@ -2050,6 +2050,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
|
|
@@ -2067,7 +2075,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
|
|
@@ -2363,20 +2374,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)) {
|
|
--
|
|
2.39.3
|
|
|