live migration: Allow cleanup after cancellation or error

Introduce qemu_savevm_state_cancel and inject a stage -1 to cancel a
live migration. This gives the involved subsystems a chance to clean up
dynamically allocated resources. Namely, the block migration layer can
now free its device descriptors and pending blocks.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
diff --git a/savevm.c b/savevm.c
index 17a6c97..9a7a78e 100644
--- a/savevm.c
+++ b/savevm.c
@@ -1299,8 +1299,10 @@
         se->save_live_state(f, QEMU_VM_SECTION_START, se->opaque);
     }
 
-    if (qemu_file_has_error(f))
+    if (qemu_file_has_error(f)) {
+        qemu_savevm_state_cancel(f);
         return -EIO;
+    }
 
     return 0;
 }
@@ -1324,8 +1326,10 @@
     if (ret)
         return 1;
 
-    if (qemu_file_has_error(f))
+    if (qemu_file_has_error(f)) {
+        qemu_savevm_state_cancel(f);
         return -EIO;
+    }
 
     return 0;
 }
@@ -1374,6 +1378,17 @@
     return 0;
 }
 
+void qemu_savevm_state_cancel(QEMUFile *f)
+{
+    SaveStateEntry *se;
+
+    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
+        if (se->save_live_state) {
+            se->save_live_state(f, -1, se->opaque);
+        }
+    }
+}
+
 int qemu_savevm_state(QEMUFile *f)
 {
     int saved_vm_running;