[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 5/9] migration: Deliver return path file error to migrate state t
From: |
Peter Xu |
Subject: |
[PATCH 5/9] migration: Deliver return path file error to migrate state too |
Date: |
Tue, 29 Aug 2023 17:42:31 -0400 |
We've already did this for most of the return path thread errors, but not
yet for the IO errors happened on the return path qemufile. Do that too.
Remember to reset "err" always, because the ownership is not us anymore,
otherwise we're prone to use-after-free later after recovered.
Re-export qemu_file_get_error_obj().
Reviewed-by: Fabiano Rosas <farosas@suse.de>
Signed-off-by: Peter Xu <peterx@redhat.com>
---
migration/qemu-file.h | 1 +
migration/migration.c | 7 +++++++
migration/qemu-file.c | 2 +-
3 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/migration/qemu-file.h b/migration/qemu-file.h
index 47015f5201..bc6edc5c39 100644
--- a/migration/qemu-file.h
+++ b/migration/qemu-file.h
@@ -129,6 +129,7 @@ void qemu_file_skip(QEMUFile *f, int size);
void qemu_file_credit_transfer(QEMUFile *f, size_t size);
int qemu_file_get_error_obj_any(QEMUFile *f1, QEMUFile *f2, Error **errp);
void qemu_file_set_error_obj(QEMUFile *f, int ret, Error *err);
+int qemu_file_get_error_obj(QEMUFile *f, Error **errp);
void qemu_file_set_error(QEMUFile *f, int ret);
int qemu_file_shutdown(QEMUFile *f);
QEMUFile *qemu_file_get_return_path(QEMUFile *f);
diff --git a/migration/migration.c b/migration/migration.c
index def9d119b1..576e102319 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2027,6 +2027,13 @@ out:
res = qemu_file_get_error(rp);
if (res) {
+ /* We have forwarded any error in "err" already, reuse "error" */
+ assert(err == NULL);
+ /* Try to deliver this file error to migration state */
+ qemu_file_get_error_obj(rp, &err);
+ migrate_set_error(ms, err);
+ err = NULL;
+
if (res && migration_in_postcopy()) {
/*
* Maybe there is something we can do: it looks like a
diff --git a/migration/qemu-file.c b/migration/qemu-file.c
index 19c33c9985..eea7171192 100644
--- a/migration/qemu-file.c
+++ b/migration/qemu-file.c
@@ -146,7 +146,7 @@ void qemu_file_set_hooks(QEMUFile *f, const QEMUFileHooks
*hooks)
* is not 0.
*
*/
-static int qemu_file_get_error_obj(QEMUFile *f, Error **errp)
+int qemu_file_get_error_obj(QEMUFile *f, Error **errp)
{
if (errp) {
*errp = f->last_error_obj ? error_copy(f->last_error_obj) : NULL;
--
2.41.0
- [PATCH 0/9] migration: Better error handling in rp thread, allow failures in recover, Peter Xu, 2023/08/29
- [PATCH 6/9] qemufile: Always return a verbose error, Peter Xu, 2023/08/29
- [PATCH 7/9] migration: Remember num of ramblocks to sync during recovery, Peter Xu, 2023/08/29
- [PATCH 1/9] migration: Display error in query-migrate irrelevant of status, Peter Xu, 2023/08/29
- [PATCH 5/9] migration: Deliver return path file error to migrate state too,
Peter Xu <=
- [PATCH 4/9] migration: Refactor error handling in source return path, Peter Xu, 2023/08/29
- [PATCH 9/9] migration/postcopy: Allow network to fail even during recovery, Peter Xu, 2023/08/29
- [PATCH 2/9] migration: Let migrate_set_error() take ownership, Peter Xu, 2023/08/29
- [PATCH 3/9] migration: Introduce migrate_has_error(), Peter Xu, 2023/08/29
- [PATCH 8/9] migration: Add migration_rp_wait|kick(), Peter Xu, 2023/08/29