Patchwork [3/3] Enable migration without shared storage from the monitor

login
register
mail settings
Submitter lirans@il.ibm.com
Date Sept. 10, 2009, 10:23 a.m.
Message ID <1252578235119-git-send-email-lirans@il.ibm.com>
Download mbox | patch
Permalink /patch/33309/
State Superseded
Headers show

Comments

lirans@il.ibm.com - Sept. 10, 2009, 10:23 a.m.
This patch adds the option to activate non-shared storage migration from the
monitor.
The migration command is as follows:
(qemu) migrate -d tcp:0:4444 # for ordinary live migration
(qemu) migrate -d blk tcp:0:4444 # for live migration with complete storage copy
(qemu) migrate -d blk inc tcp:0:4444 # for live migration with incremental storage copy, storage is cow based.
Pierre Riteau - Sept. 10, 2009, 11:29 a.m.
On 10 sept. 2009, at 12:23, lirans@il.ibm.com wrote:

> This patch adds the option to activate non-shared storage migration  
> from the
> monitor.
> The migration command is as follows:
> (qemu) migrate -d tcp:0:4444 # for ordinary live migration
> (qemu) migrate -d blk tcp:0:4444 # for live migration with complete  
> storage copy
> (qemu) migrate -d blk inc tcp:0:4444 # for live migration with  
> incremental storage copy, storage is cow based.
>
> diff --git a/monitor.c b/monitor.c
> index 8d5165c..c8a6228 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -37,6 +37,7 @@
> #include "readline.h"
> #include "console.h"
> #include "block.h"
> +#include "block-migration.h"
> #include "audio/audio.h"
> #include "disas.h"
> #include "balloon.h"
> @@ -2507,6 +2508,24 @@ static void monitor_handle_command(Monitor  
> *mon, const char *cmdline)
>                         goto add_str;
>                     }
>                 }
> +
> +		if (*typestr == '!') {
> +		    char flag[4];
> +		    char * cmd_flag;
> +		    typestr++;
> +                    memcpy(flag, typestr, 3);
> +		    typestr += 3;
> +		    flag[4] = '\0';


You still have a buffer overflow here.

Patch

diff --git a/monitor.c b/monitor.c
index 8d5165c..c8a6228 100644
--- a/monitor.c
+++ b/monitor.c
@@ -37,6 +37,7 @@ 
 #include "readline.h"
 #include "console.h"
 #include "block.h"
+#include "block-migration.h"
 #include "audio/audio.h"
 #include "disas.h"
 #include "balloon.h"
@@ -2507,6 +2508,24 @@  static void monitor_handle_command(Monitor *mon, const char *cmdline)
                         goto add_str;
                     }
                 }
+
+		if (*typestr == '!') {
+		    char flag[4];
+		    char * cmd_flag;
+		    typestr++;
+                    memcpy(flag, typestr, 3);
+		    typestr += 3;
+		    flag[4] = '\0';
+		    
+		    cmd_flag = strstr(p, flag);
+		    if (cmd_flag != p) {
+                        /* no optional string: NULL argument */
+		        str = NULL;
+                        goto add_str;
+                    }
+		    
+                }
+		
                 ret = get_str(buf, sizeof(buf), &p);
                 if (ret < 0) {
                     switch(c) {
diff --git a/qemu-monitor.hx b/qemu-monitor.hx
index dea0704..e466774 100644
--- a/qemu-monitor.hx
+++ b/qemu-monitor.hx
@@ -463,8 +463,8 @@  STEXI
 Inject an NMI on the given CPU (x86 only).
 ETEXI
 
-    { "migrate", "-ds", do_migrate,
-      "[-d] uri", "migrate to URI (using -d to not wait for completion)" },
+    { "migrate", "-ds!blks!incs", do_migrate,
+        "[-d] [blk] [inc] uri", "migrate to URI (using -d - to not wait \n\t\tfor completion,\n\t\t [blk] -  for migration without shared storage,\n\t\t [inc] - for incremental migration if base image is identical)" },
 STEXI
 @item migrate [-d] @var{uri}
 Migrate to @var{uri} (using -d to not wait for completion).