Commit 6d99c2d4 authored by Fei Li's avatar Fei Li Committed by Dr. David Alan Gilbert
Browse files

migration: unify error handling for process_incoming_migration_co



In the current code, if process_incoming_migration_co() fails we do
the same error handing: set the error state, close the source file,
do the cleanup for multifd, and then exit(EXIT_FAILURE). To make the
code clearer, add a "goto fail" to unify the error handling.

Cc: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: default avatarFei Li <fli@suse.com>
Reviewed-by: default avatarDr. David Alan Gilbert <dgilbert@redhat.com>
Message-Id: <20190113140849.38339-6-lifei1214@126.com>
Signed-off-by: default avatarDr. David Alan Gilbert <dgilbert@redhat.com>
parent 91b02dc7
Loading
Loading
Loading
Loading
+13 −13
Original line number Diff line number Diff line
@@ -438,15 +438,13 @@ static void process_incoming_migration_co(void *opaque)
        /* Make sure all file formats flush their mutable metadata */
        bdrv_invalidate_cache_all(&local_err);
        if (local_err) {
            migrate_set_state(&mis->state, MIGRATION_STATUS_ACTIVE,
                    MIGRATION_STATUS_FAILED);
            error_report_err(local_err);
            exit(EXIT_FAILURE);
            goto fail;
        }

        if (colo_init_ram_cache() < 0) {
            error_report("Init ram cache failed");
            exit(EXIT_FAILURE);
            goto fail;
        }

        qemu_thread_create(&mis->colo_incoming_thread, "COLO incoming",
@@ -461,21 +459,23 @@ static void process_incoming_migration_co(void *opaque)
    }

    if (ret < 0) {
        Error *local_err = NULL;

        error_report("load of migration failed: %s", strerror(-ret));
        goto fail;
    }
    mis->bh = qemu_bh_new(process_incoming_migration_bh, mis);
    qemu_bh_schedule(mis->bh);
    mis->migration_incoming_co = NULL;
    return;
fail:
    local_err = NULL;
    migrate_set_state(&mis->state, MIGRATION_STATUS_ACTIVE,
                      MIGRATION_STATUS_FAILED);
        error_report("load of migration failed: %s", strerror(-ret));
    qemu_fclose(mis->from_src_file);
    if (multifd_load_cleanup(&local_err) != 0) {
        error_report_err(local_err);
    }
    exit(EXIT_FAILURE);
}
    mis->bh = qemu_bh_new(process_incoming_migration_bh, mis);
    qemu_bh_schedule(mis->bh);
    mis->migration_incoming_co = NULL;
}

static void migration_incoming_setup(QEMUFile *f)
{