Index: new/blockdev.c
===================================================================
---- new.orig/blockdev.c 2013-12-02 07:42:33.000000000 +0100
-+++ new/blockdev.c 2013-12-02 08:40:19.000000000 +0100
+--- new.orig/blockdev.c 2013-12-02 11:40:36.000000000 +0100
++++ new/blockdev.c 2013-12-02 12:07:54.000000000 +0100
@@ -45,6 +45,7 @@
#include "qmp-commands.h"
#include "trace.h"
static QTAILQ_HEAD(drivelist, DriveInfo) drives = QTAILQ_HEAD_INITIALIZER(drives);
-@@ -1438,6 +1439,412 @@
+@@ -1438,6 +1439,417 @@
}
}
+ }
+}
+
-+static void pvebackup_cancel(void)
++static void pvebackup_cancel(void *opaque)
+{
+ backup_state.cancel = true;
+
+
+void qmp_backup_cancel(Error **errp)
+{
-+ pvebackup_cancel();
++ Coroutine *co = qemu_coroutine_create(pvebackup_cancel);
++ qemu_coroutine_enter(co, NULL);
++
++ while (backup_state.vmaw) {
++ qemu_aio_wait();
++ }
+}
+
+static void pvebackup_run_next_job(void)
+ pvebackup_dump_cb, pvebackup_complete_cb, di, &local_err);
+ if (local_err != NULL) {
+ error_setg(&backup_state.error, "backup_job_create failed");
-+ pvebackup_cancel();
++ pvebackup_cancel(NULL);
+ }
+ }
+
{
Index: new/hmp-commands.hx
===================================================================
---- new.orig/hmp-commands.hx 2013-12-02 07:39:56.000000000 +0100
-+++ new/hmp-commands.hx 2013-12-02 08:19:27.000000000 +0100
+--- new.orig/hmp-commands.hx 2013-11-27 10:51:33.000000000 +0100
++++ new/hmp-commands.hx 2013-12-02 11:40:36.000000000 +0100
@@ -83,6 +83,35 @@
Copy data from a backing file into a block device.
ETEXI
@item info migrate_capabilities
Index: new/hmp.c
===================================================================
---- new.orig/hmp.c 2013-12-02 07:39:56.000000000 +0100
-+++ new/hmp.c 2013-12-02 08:21:00.000000000 +0100
+--- new.orig/hmp.c 2013-12-02 11:40:35.000000000 +0100
++++ new/hmp.c 2013-12-02 11:40:36.000000000 +0100
@@ -133,6 +133,38 @@
qapi_free_MouseInfoList(mice_list);
}
Error *error = NULL;
Index: new/hmp.h
===================================================================
---- new.orig/hmp.h 2013-12-02 07:39:56.000000000 +0100
-+++ new/hmp.h 2013-12-02 08:22:00.000000000 +0100
+--- new.orig/hmp.h 2013-11-27 10:51:33.000000000 +0100
++++ new/hmp.h 2013-12-02 11:40:36.000000000 +0100
@@ -28,6 +28,7 @@
void hmp_info_migrate(Monitor *mon, const QDict *qdict);
void hmp_info_migrate_capabilities(Monitor *mon, const QDict *qdict);
void hmp_block_job_pause(Monitor *mon, const QDict *qdict);
Index: new/monitor.c
===================================================================
---- new.orig/monitor.c 2013-12-02 07:39:56.000000000 +0100
-+++ new/monitor.c 2013-12-02 08:22:29.000000000 +0100
+--- new.orig/monitor.c 2013-11-27 10:51:33.000000000 +0100
++++ new/monitor.c 2013-12-02 11:40:36.000000000 +0100
@@ -2880,6 +2880,13 @@
},
#endif
.params = "",
Index: new/qapi-schema.json
===================================================================
---- new.orig/qapi-schema.json 2013-12-02 07:39:56.000000000 +0100
-+++ new/qapi-schema.json 2013-12-02 08:16:27.000000000 +0100
+--- new.orig/qapi-schema.json 2013-12-02 11:40:35.000000000 +0100
++++ new/qapi-schema.json 2013-12-02 11:40:36.000000000 +0100
@@ -547,6 +547,95 @@
##
{ 'command': 'query-events', 'returns': ['EventInfo'] }
#
Index: new/qmp-commands.hx
===================================================================
---- new.orig/qmp-commands.hx 2013-12-02 07:39:56.000000000 +0100
-+++ new/qmp-commands.hx 2013-12-02 08:19:45.000000000 +0100
+--- new.orig/qmp-commands.hx 2013-12-02 11:40:35.000000000 +0100
++++ new/qmp-commands.hx 2013-12-02 11:40:36.000000000 +0100
@@ -966,6 +966,24 @@
EQMP