* Juan Quintela (quint...@redhat.com) wrote: > We need to change the full chain to pass the Error parameter. > > Signed-off-by: Juan Quintela <quint...@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilb...@redhat.com> > > --- > > Always use a local_err, and in case of error propagate/print it as needed. > --- > migration/migration.c | 35 +++++++++++++++++++++++++++++------ > migration/migration.h | 2 +- > migration/ram.c | 2 +- > migration/ram.h | 2 +- > migration/rdma.c | 2 +- > 5 files changed, 33 insertions(+), 10 deletions(-) > > diff --git a/migration/migration.c b/migration/migration.c > index 7140d1e040..ef17b9f3f2 100644 > --- a/migration/migration.c > +++ b/migration/migration.c > @@ -518,13 +518,23 @@ fail: > exit(EXIT_FAILURE); > } > > -static void migration_incoming_setup(QEMUFile *f) > +/** > + * @migration_incoming_setup: Setup incoming migration > + * > + * Returns 0 for no error or 1 for error > + * > + * @f: file for main migration channel > + * @errp: where to put errors > + */ > +static int migration_incoming_setup(QEMUFile *f, Error **errp) > { > MigrationIncomingState *mis = migration_incoming_get_current(); > + Error *local_err = NULL; > > - if (multifd_load_setup() != 0) { > + if (multifd_load_setup(&local_err) != 0) { > /* We haven't been able to create multifd threads > nothing better to do */ > + error_report_err(local_err); > exit(EXIT_FAILURE); > } > > @@ -532,6 +542,7 @@ static void migration_incoming_setup(QEMUFile *f) > mis->from_src_file = f; > } > qemu_file_set_blocking(f, false); > + return 0; > } > > void migration_incoming_process(void) > @@ -572,19 +583,27 @@ static bool postcopy_try_recover(QEMUFile *f) > return false; > } > > -void migration_fd_process_incoming(QEMUFile *f) > +void migration_fd_process_incoming(QEMUFile *f, Error **errp) > { > + Error *local_err = NULL; > + > if (postcopy_try_recover(f)) { > return; > } > > - migration_incoming_setup(f); > + if (migration_incoming_setup(f, &local_err)) { > + if (local_err) { > + error_propagate(errp, local_err); > + } > + return; > + } > migration_incoming_process(); > } > > void migration_ioc_process_incoming(QIOChannel *ioc, Error **errp) > { > MigrationIncomingState *mis = migration_incoming_get_current(); > + Error *local_err = NULL; > bool start_migration; > > if (!mis->from_src_file) { > @@ -596,7 +615,12 @@ void migration_ioc_process_incoming(QIOChannel *ioc, > Error **errp) > return; > } > > - migration_incoming_setup(f); > + if (migration_incoming_setup(f, &local_err)) { > + if (local_err) { > + error_propagate(errp, local_err); > + } > + return; > + } > > /* > * Common migration only needs one channel, so we can start > @@ -604,7 +628,6 @@ void migration_ioc_process_incoming(QIOChannel *ioc, > Error **errp) > */ > start_migration = !migrate_use_multifd(); > } else { > - Error *local_err = NULL; > /* Multiple connections */ > assert(migrate_use_multifd()); > start_migration = multifd_recv_new_channel(ioc, &local_err); > diff --git a/migration/migration.h b/migration/migration.h > index 44b1d56929..8473ddfc88 100644 > --- a/migration/migration.h > +++ b/migration/migration.h > @@ -265,7 +265,7 @@ struct MigrationState > > void migrate_set_state(int *state, int old_state, int new_state); > > -void migration_fd_process_incoming(QEMUFile *f); > +void migration_fd_process_incoming(QEMUFile *f, Error **errp); > void migration_ioc_process_incoming(QIOChannel *ioc, Error **errp); > void migration_incoming_process(void); > > diff --git a/migration/ram.c b/migration/ram.c > index d537264ba5..125c6d0f60 100644 > --- a/migration/ram.c > +++ b/migration/ram.c > @@ -1463,7 +1463,7 @@ static void *multifd_recv_thread(void *opaque) > return NULL; > } > > -int multifd_load_setup(void) > +int multifd_load_setup(Error **errp) > { > int thread_count; > uint32_t page_count = MULTIFD_PACKET_SIZE / qemu_target_page_size(); > diff --git a/migration/ram.h b/migration/ram.h > index da22a417ea..42be471d52 100644 > --- a/migration/ram.h > +++ b/migration/ram.h > @@ -43,7 +43,7 @@ uint64_t ram_bytes_total(void); > > int multifd_save_setup(Error **errp); > void multifd_save_cleanup(void); > -int multifd_load_setup(void); > +int multifd_load_setup(Error **errp); > int multifd_load_cleanup(Error **errp); > bool multifd_recv_all_channels_created(void); > bool multifd_recv_new_channel(QIOChannel *ioc, Error **errp); > diff --git a/migration/rdma.c b/migration/rdma.c > index e241dcb992..2379b8345b 100644 > --- a/migration/rdma.c > +++ b/migration/rdma.c > @@ -4004,7 +4004,7 @@ static void rdma_accept_incoming_migration(void *opaque) > } > > rdma->migration_started_on_destination = 1; > - migration_fd_process_incoming(f); > + migration_fd_process_incoming(f, errp); > } > > void rdma_start_incoming_migration(const char *host_port, Error **errp) > -- > 2.24.1 > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK