qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH COLO-Frame v11 09/39] COLO/migration: Create a n


From: Dr. David Alan Gilbert
Subject: Re: [Qemu-devel] [PATCH COLO-Frame v11 09/39] COLO/migration: Create a new communication path from destination to source
Date: Tue, 24 Nov 2015 18:40:23 +0000
User-agent: Mutt/1.5.24 (2015-08-30)

* zhanghailiang (address@hidden) wrote:
> This new communication path will be used for returning messages
> from destination to source.
> 
> Signed-off-by: zhanghailiang <address@hidden>
> Signed-off-by: Li Zhijian <address@hidden>
> Cc: Dr. David Alan Gilbert <address@hidden>

Reviewed-by: Dr. David Alan Gilbert <address@hidden>

> ---
> v11:
> - Rebase master to use qemu_file_get_return_path() for opening return path
> v10:
> - fix the the error log (Dave's suggestion).
> ---
>  migration/colo.c | 39 +++++++++++++++++++++++++++++++++++++++
>  1 file changed, 39 insertions(+)
> 
> diff --git a/migration/colo.c b/migration/colo.c
> index 6880aa0..0ab9618 100644
> --- a/migration/colo.c
> +++ b/migration/colo.c
> @@ -36,6 +36,15 @@ bool migration_incoming_in_colo_state(void)
>  
>  static void colo_process_checkpoint(MigrationState *s)
>  {
> +    int ret = 0;
> +
> +    s->rp_state.from_dst_file = qemu_file_get_return_path(s->to_dst_file);
> +    if (!s->rp_state.from_dst_file) {
> +        ret = -EINVAL;
> +        error_report("Open QEMUFile from_dst_file failed");
> +        goto out;
> +    }
> +
>      qemu_mutex_lock_iothread();
>      vm_start();
>      qemu_mutex_unlock_iothread();
> @@ -43,8 +52,16 @@ static void colo_process_checkpoint(MigrationState *s)
>  
>      /*TODO: COLO checkpoint savevm loop*/
>  
> +out:
> +    if (ret < 0) {
> +        error_report("%s: %s", __func__, strerror(-ret));
> +    }
>      migrate_set_state(&s->state, MIGRATION_STATUS_COLO,
>                        MIGRATION_STATUS_COMPLETED);
> +
> +    if (s->rp_state.from_dst_file) {
> +        qemu_fclose(s->rp_state.from_dst_file);
> +    }
>  }
>  
>  void migrate_start_colo_process(MigrationState *s)
> @@ -59,12 +76,34 @@ void migrate_start_colo_process(MigrationState *s)
>  void *colo_process_incoming_thread(void *opaque)
>  {
>      MigrationIncomingState *mis = opaque;
> +    int ret = 0;
>  
>      migrate_set_state(&mis->state, MIGRATION_STATUS_ACTIVE,
>                        MIGRATION_STATUS_COLO);
>  
> +    mis->to_src_file = qemu_file_get_return_path(mis->from_src_file);
> +    if (!mis->to_src_file) {
> +        ret = -EINVAL;
> +        error_report("colo incoming thread: Open QEMUFile to_src_file 
> failed");
> +        goto out;
> +    }
> +    /* Note: We set the fd to unblocked in migration incoming coroutine,
> +    *  But here we are in the colo incoming thread, so it is ok to set the
> +    *  fd back to blocked.
> +    */
> +    qemu_set_block(qemu_get_fd(mis->from_src_file));
> +
>      /* TODO: COLO checkpoint restore loop */
>  
> +out:
> +    if (ret < 0) {
> +        error_report("colo incoming thread will exit, detect error: %s",
> +                     strerror(-ret));
> +    }
> +
> +    if (mis->to_src_file) {
> +        qemu_fclose(mis->to_src_file);
> +    }
>      migration_incoming_exit_colo();
>  
>      return NULL;
> -- 
> 1.8.3.1
> 
> 
--
Dr. David Alan Gilbert / address@hidden / Manchester, UK



reply via email to

[Prev in Thread] Current Thread [Next in Thread]