From: Steve Sistare <steven.sistare@oracle.com>
To: qemu-devel@nongnu.org
Cc: Peter Xu <peterx@redhat.com>, Fabiano Rosas <farosas@suse.de>,
"Michael S. Tsirkin" <mst@redhat.com>,
Jason Wang <jasowang@redhat.com>,
Alex Williamson <alex.williamson@redhat.com>,
Cedric Le Goater <clg@redhat.com>,
Gerd Hoffmann <kraxel@redhat.com>,
Marc-Andre Lureau <marcandre.lureau@redhat.com>,
David Hildenbrand <david@redhat.com>,
Steve Sistare <steven.sistare@oracle.com>
Subject: [PATCH V2 09/11] migration: notifier error checking
Date: Fri, 12 Jan 2024 07:05:08 -0800 [thread overview]
Message-ID: <1705071910-174321-10-git-send-email-steven.sistare@oracle.com> (raw)
In-Reply-To: <1705071910-174321-1-git-send-email-steven.sistare@oracle.com>
Check the status returned by migration notifiers and report errors.
If notifiers fail, call the notifiers again so they can clean up.
None of the notifiers return an error status at this time.
Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
---
include/migration/misc.h | 2 +-
migration/migration.c | 37 ++++++++++++++++++++++++++++---------
2 files changed, 29 insertions(+), 10 deletions(-)
diff --git a/include/migration/misc.h b/include/migration/misc.h
index e79694f..782bdec 100644
--- a/include/migration/misc.h
+++ b/include/migration/misc.h
@@ -73,7 +73,7 @@ void migration_add_notifier(NotifierWithReturn *notify,
void migration_add_notifier_mode(NotifierWithReturn *notify,
MigrationNotifyFunc func, MigMode mode);
void migration_remove_notifier(NotifierWithReturn *notify);
-void migration_call_notifiers(MigrationState *s);
+int migration_call_notifiers(MigrationState *s, Error **errp);
bool migration_in_setup(MigrationState *);
bool migration_has_finished(MigrationState *);
bool migration_has_failed(MigrationState *);
diff --git a/migration/migration.c b/migration/migration.c
index c828ba7..86a5a94 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1274,6 +1274,8 @@ void migrate_set_state(int *state, int old_state, int new_state)
static void migrate_fd_cleanup(MigrationState *s)
{
+ Error *local_err = NULL;
+
qemu_bh_delete(s->cleanup_bh);
s->cleanup_bh = NULL;
@@ -1321,11 +1323,23 @@ static void migrate_fd_cleanup(MigrationState *s)
MIGRATION_STATUS_CANCELLED);
}
+ if (!migration_has_failed(s) &&
+ migration_call_notifiers(s, &local_err)) {
+
+ migrate_set_state(&s->state, s->state, MIGRATION_STATUS_FAILED);
+ migrate_set_error(s, local_err);
+ error_free(local_err);
+ }
+
if (s->error) {
/* It is used on info migrate. We can't free it */
error_report_err(error_copy(s->error));
}
- migration_call_notifiers(s);
+
+ if (migration_has_failed(s)) {
+ migration_call_notifiers(s, NULL);
+ }
+
block_cleanup_parameters();
yank_unregister_instance(MIGRATION_YANK_INSTANCE);
}
@@ -1450,13 +1464,14 @@ void migration_remove_notifier(NotifierWithReturn *notify)
}
}
-void migration_call_notifiers(MigrationState *s)
+int migration_call_notifiers(MigrationState *s, Error **errp)
{
MigMode mode = s->parameters.mode;
MigrationEvent e;
e.state = s->state;
- notifier_with_return_list_notify(&migration_state_notifiers[mode], &e, 0);
+ return notifier_with_return_list_notify(&migration_state_notifiers[mode],
+ &e, errp);
}
bool migration_in_setup(MigrationState *s)
@@ -2520,7 +2535,9 @@ static int postcopy_start(MigrationState *ms, Error **errp)
* spice needs to trigger a transition now
*/
ms->postcopy_after_devices = true;
- migration_call_notifiers(ms);
+ if (migration_call_notifiers(ms, errp)) {
+ goto fail;
+ }
migration_downtime_end(ms);
@@ -2540,11 +2557,10 @@ static int postcopy_start(MigrationState *ms, Error **errp)
ret = qemu_file_get_error(ms->to_dst_file);
if (ret) {
- error_setg(errp, "postcopy_start: Migration stream errored");
- migrate_set_state(&ms->state, MIGRATION_STATUS_POSTCOPY_ACTIVE,
- MIGRATION_STATUS_FAILED);
+ error_setg_errno(errp, -ret, "postcopy_start: Migration stream error");
+ bql_lock();
+ goto fail;
}
-
trace_postcopy_preempt_enabled(migrate_postcopy_preempt());
return ret;
@@ -2565,6 +2581,7 @@ fail:
error_report_err(local_err);
}
}
+ migration_call_notifiers(ms, NULL); /* Notify about failure */
bql_unlock();
return -1;
}
@@ -3590,7 +3607,9 @@ void migrate_fd_connect(MigrationState *s, Error *error_in)
rate_limit = migrate_max_bandwidth();
/* Notify before starting migration thread */
- migration_call_notifiers(s);
+ if (migration_call_notifiers(s, &local_err)) {
+ goto fail;
+ }
}
migration_rate_set(rate_limit);
--
1.8.3.1
next prev parent reply other threads:[~2024-01-12 15:05 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-12 15:04 [PATCH V2 00/11] allow cpr-reboot for vfio Steve Sistare
2024-01-12 15:05 ` [PATCH V2 01/11] notify: pass error to notifier with return Steve Sistare
2024-01-15 6:38 ` Peter Xu
2024-01-12 15:05 ` [PATCH V2 02/11] migration: remove error from notifier data Steve Sistare
2024-01-15 6:38 ` Peter Xu
2024-01-12 15:05 ` [PATCH V2 03/11] migration: convert to NotifierWithReturn Steve Sistare
2024-01-15 6:44 ` Peter Xu
2024-01-16 20:35 ` Steven Sistare
2024-01-17 2:29 ` Peter Xu
2024-01-12 15:05 ` [PATCH V2 04/11] migration: remove migration_in_postcopy parameter Steve Sistare
2024-01-15 6:48 ` Peter Xu
2024-01-16 20:36 ` Steven Sistare
2024-01-12 15:05 ` [PATCH V2 05/11] migration: MigrationEvent for notifiers Steve Sistare
2024-01-12 15:18 ` Steven Sistare
2024-01-12 15:05 ` [PATCH V2 06/11] migration: MigrationNotifyFunc Steve Sistare
2024-01-12 15:05 ` [PATCH V2 07/11] migration: per-mode notifiers Steve Sistare
2024-01-12 15:05 ` [PATCH V2 08/11] migration: refactor migrate_fd_connect failures Steve Sistare
2024-01-15 7:37 ` Peter Xu
2024-01-16 20:35 ` Steven Sistare
2024-01-12 15:05 ` Steve Sistare [this message]
2024-01-12 15:05 ` [PATCH V2 10/11] vfio: register container for cpr Steve Sistare
2024-01-12 15:05 ` [PATCH V2 11/11] vfio: allow cpr-reboot migration if suspended Steve Sistare
2024-01-15 7:33 ` Peter Xu
2024-01-16 20:37 ` Steven Sistare
2024-01-16 20:44 ` Steven Sistare
2024-01-17 7:12 ` Peter Xu
2024-01-17 21:30 ` Steven Sistare
2024-01-18 3:20 ` Peter Xu
2024-01-12 21:38 ` [PATCH V2 00/11] allow cpr-reboot for vfio Alex Williamson
2024-01-16 20:36 ` Steven Sistare
2024-01-15 10:48 ` David Hildenbrand
2024-01-15 10:51 ` David Hildenbrand
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1705071910-174321-10-git-send-email-steven.sistare@oracle.com \
--to=steven.sistare@oracle.com \
--cc=alex.williamson@redhat.com \
--cc=clg@redhat.com \
--cc=david@redhat.com \
--cc=farosas@suse.de \
--cc=jasowang@redhat.com \
--cc=kraxel@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=mst@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).