All of lore.kernel.org
 help / color / mirror / Atom feed
From: Luiz Capitulino <lcapitulino@redhat.com>
To: Amit Shah <amit.shah@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	qemu list <qemu-devel@nongnu.org>,
	laine@redhat.com, quintela@redhat.com
Subject: [Qemu-devel] Re: [PATCH] migration: Issue 'cont' only on successful incoming migration
Date: Fri, 23 Jul 2010 15:08:18 -0300	[thread overview]
Message-ID: <20100723150818.69cde489@redhat.com> (raw)
In-Reply-To: <c704dd9f86e827f6e87c7dbfda96d309c0dd43bd.1279881908.git.amit.shah@redhat.com>

On Fri, 23 Jul 2010 16:15:15 +0530
Amit Shah <amit.shah@redhat.com> wrote:

> When a 'cont' is issued on a VM that's just waiting for an incoming
> migration, the VM reboots and boots into the guest, possibly corrupting
> its storage since it could be shared with another VM running elsewhere.
> 
> Ensure that a VM started with '-incoming' is only run when an incoming
> migration successfully completes.
> 
> Reported-by: Laine Stump <laine@redhat.com>
> Signed-off-by: Amit Shah <amit.shah@redhat.com>
> ---
>  migration.c |    3 +++
>  monitor.c   |    4 ++++
>  sysemu.h    |    1 +
>  vl.c        |    3 +++
>  4 files changed, 11 insertions(+), 0 deletions(-)
> 
> diff --git a/migration.c b/migration.c
> index 650eb78..84d7e4a 100644
> --- a/migration.c
> +++ b/migration.c
> @@ -67,6 +67,9 @@ void process_incoming_migration(QEMUFile *f)
>      qemu_announce_self();
>      DPRINTF("successfully loaded vm state\n");
>  
> +    incoming_expected = false;
> +    incoming_done = true;
> +
>      if (autostart)
>          vm_start();
>  }
> diff --git a/monitor.c b/monitor.c
> index 45fd482..d12a7b5 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -1056,6 +1056,10 @@ static int do_cont(Monitor *mon, const QDict *qdict, QObject **ret_data)
>  {
>      struct bdrv_iterate_context context = { mon, 0 };
>  
> +    if (incoming_expected && !incoming_done) {
> +        autostart = 1;

Why do we need to set autostart? We should just fail if we're unable to run.

> +        return 1; /* Waiting for incoming migration */

You should return -1 and use qerror_report(), so that we have a meaningful
error in the user Monitor and QMP (otherwise we'll get UndefinedError).

And incomding_done is not needed.

> +    }
>      bdrv_iterate(encrypted_bdrv_it, &context);
>      /* only resume the vm if all keys are set and valid */
>      if (!context.err) {
> diff --git a/sysemu.h b/sysemu.h
> index 9c988bb..f9c1962 100644
> --- a/sysemu.h
> +++ b/sysemu.h
> @@ -99,6 +99,7 @@ typedef enum DisplayType
>  } DisplayType;
>  
>  extern int autostart;
> +extern int incoming_expected, incoming_done;
>  extern int bios_size;
>  
>  typedef enum {
> diff --git a/vl.c b/vl.c
> index ba6ee11..b69c11b 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -182,6 +182,8 @@ int nb_nics;
>  NICInfo nd_table[MAX_NICS];
>  int vm_running;
>  int autostart;
> +int incoming_expected; /* Started with -incoming and waiting for incoming */
> +int incoming_done; /* Incoming migration successful */
>  static int rtc_utc = 1;
>  static int rtc_date_offset = -1; /* -1 means no change */
>  QEMUClock *rtc_clock;
> @@ -2557,6 +2559,7 @@ int main(int argc, char **argv, char **envp)
>                  break;
>              case QEMU_OPTION_incoming:
>                  incoming = optarg;
> +                incoming_expected = true;
>                  break;
>              case QEMU_OPTION_nodefaults:
>                  default_serial = 0;

  reply	other threads:[~2010-07-23 18:09 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-23 10:45 [Qemu-devel] [PATCH] migration: Issue 'cont' only on successful incoming migration Amit Shah
2010-07-23 18:08 ` Luiz Capitulino [this message]
2010-07-24  7:31   ` [Qemu-devel] " Amit Shah
2010-07-26 14:23     ` Luiz Capitulino
2010-07-26 15:27       ` Laine Stump
2010-07-26 19:49         ` Juan Quintela
2010-07-27  9:47           ` Daniel P. Berrange

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=20100723150818.69cde489@redhat.com \
    --to=lcapitulino@redhat.com \
    --cc=amit.shah@redhat.com \
    --cc=laine@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.