On Mon, Jan 05, 2026 at 04:06:32PM -0300, Fabiano Rosas wrote:
> Leave migration_ioc_process_incoming to do only the channel
> identification process and move the migration start into
> channel.c. Both routines will be renamed in the next patches to better
> reflect their usage.
>
> Signed-off-by: Fabiano Rosas <farosas@suse.de>
Reviewed-by: Peter Xu <peterx@redhat.com>
One nitpick, as usual.
> ---
> migration/channel.c | 12 ++++++++++--
> migration/channel.h | 1 +
> migration/migration.c | 13 +++++--------
> migration/migration.h | 2 +-
> 4 files changed, 17 insertions(+), 11 deletions(-)
>
> diff --git a/migration/channel.c b/migration/channel.c
> index 6acce7b2a2..f1c1341a3e 100644
> --- a/migration/channel.c
> +++ b/migration/channel.c
> @@ -33,6 +33,7 @@ void migration_channel_process_incoming(QIOChannel *ioc)
> {
> MigrationIncomingState *mis = migration_incoming_get_current();
> Error *local_err = NULL;
> + uint8_t ch;
>
> trace_migration_set_incoming_channel(
> ioc, object_get_typename(OBJECT(ioc)));
> @@ -41,9 +42,16 @@ void migration_channel_process_incoming(QIOChannel *ioc)
> migration_tls_channel_process_incoming(ioc, &local_err);
> } else {
> migration_ioc_register_yank(ioc);
> - migration_ioc_process_incoming(ioc, &local_err);
> - }
> + ch = migration_ioc_process_incoming(ioc, &local_err);
> + if (!ch) {
> + goto out;
> + }
>
> + if (migration_incoming_setup(ioc, ch, &local_err)) {
> + migration_incoming_process();
> + }
> + }
> +out:
> if (local_err) {
> error_report_err(local_err);
> migrate_set_state(&mis->state, mis->state, MIGRATION_STATUS_FAILED);
> diff --git a/migration/channel.h b/migration/channel.h
> index 93dedbf52b..b45e909597 100644
> --- a/migration/channel.h
> +++ b/migration/channel.h
> @@ -20,6 +20,7 @@
>
> /* Migration channel types */
> enum {
typedef enum { ... } MigChannelType;
Then..
> + CH_NONE,
> CH_MAIN,
> CH_MULTIFD,
> CH_POSTCOPY
> diff --git a/migration/migration.c b/migration/migration.c
> index 906f0bdab3..8117c74b52 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -1034,10 +1034,10 @@ static bool migration_has_main_and_multifd_channels(void)
> return true;
> }
>
> -void migration_ioc_process_incoming(QIOChannel *ioc, Error **errp)
> +uint8_t migration_ioc_process_incoming(QIOChannel *ioc, Error **errp)
.. use it everywhere, including retval.
> {
> MigrationIncomingState *mis = migration_incoming_get_current();
> - uint8_t channel;
> + uint8_t channel = CH_NONE;
> uint32_t channel_magic = 0;
> int ret = 0;
>
> @@ -1056,7 +1056,7 @@ void migration_ioc_process_incoming(QIOChannel *ioc, Error **errp)
> ret = migration_channel_read_peek(ioc, (void *)&channel_magic,
> sizeof(channel_magic), errp);
> if (ret != 0) {
> - return;
> + goto out;
> }
>
> channel_magic = be32_to_cpu(channel_magic);
> @@ -1071,7 +1071,6 @@ void migration_ioc_process_incoming(QIOChannel *ioc, Error **errp)
> channel = CH_MAIN;
> } else {
> error_setg(errp, "unknown channel magic: %u", channel_magic);
> - return;
> }
> } else if (mis->from_src_file && migrate_multifd()) {
> /*
> @@ -1083,16 +1082,14 @@ void migration_ioc_process_incoming(QIOChannel *ioc, Error **errp)
> channel = CH_MAIN;
> } else {
> error_setg(errp, "non-peekable channel used without multifd");
> - return;
> }
> } else {
> assert(migrate_postcopy_preempt());
> channel = CH_POSTCOPY;
> }
>
> - if (migration_incoming_setup(ioc, channel, errp)) {
> - migration_incoming_process();
> - }
> +out:
> + return channel;
> }
>
> /**
> diff --git a/migration/migration.h b/migration/migration.h
> index cd6cfd62ba..c760349b07 100644
> --- a/migration/migration.h
> +++ b/migration/migration.h
> @@ -527,7 +527,7 @@ struct MigrationState {
> void migrate_set_state(MigrationStatus *state, MigrationStatus old_state,
> MigrationStatus new_state);
>
> -void migration_ioc_process_incoming(QIOChannel *ioc, Error **errp);
> +uint8_t migration_ioc_process_incoming(QIOChannel *ioc, Error **errp);
> void migration_incoming_process(void);
> bool migration_incoming_setup(QIOChannel *ioc, uint8_t channel, Error **errp);
> void migration_outgoing_setup(QIOChannel *ioc);
> --
> 2.51.0
>
--
Peter Xu