update patches with some pbs-state migration cleanups
...and literal cleanup, as in, call save_cleanup after success or error. Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
This commit is contained in:
parent
32ee41155b
commit
cfe02b3b4e
@ -15,11 +15,11 @@ Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
|
|||||||
---
|
---
|
||||||
include/migration/misc.h | 3 ++
|
include/migration/misc.h | 3 ++
|
||||||
migration/Makefile.objs | 1 +
|
migration/Makefile.objs | 1 +
|
||||||
migration/pbs-state.c | 97 ++++++++++++++++++++++++++++++++++++++++
|
migration/pbs-state.c | 106 +++++++++++++++++++++++++++++++++++++++
|
||||||
pve-backup.c | 1 +
|
pve-backup.c | 1 +
|
||||||
qapi/block-core.json | 6 +++
|
qapi/block-core.json | 6 +++
|
||||||
softmmu/vl.c | 1 +
|
softmmu/vl.c | 1 +
|
||||||
6 files changed, 109 insertions(+)
|
6 files changed, 118 insertions(+)
|
||||||
create mode 100644 migration/pbs-state.c
|
create mode 100644 migration/pbs-state.c
|
||||||
|
|
||||||
diff --git a/include/migration/misc.h b/include/migration/misc.h
|
diff --git a/include/migration/misc.h b/include/migration/misc.h
|
||||||
@ -48,10 +48,10 @@ index 0fc619e380..20b3792599 100644
|
|||||||
common-obj-$(CONFIG_RDMA) += rdma.o
|
common-obj-$(CONFIG_RDMA) += rdma.o
|
||||||
diff --git a/migration/pbs-state.c b/migration/pbs-state.c
|
diff --git a/migration/pbs-state.c b/migration/pbs-state.c
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000..c711498c3e
|
index 0000000000..29f2b3860d
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/migration/pbs-state.c
|
+++ b/migration/pbs-state.c
|
||||||
@@ -0,0 +1,97 @@
|
@@ -0,0 +1,106 @@
|
||||||
+/*
|
+/*
|
||||||
+ * PBS (dirty-bitmap) state migration
|
+ * PBS (dirty-bitmap) state migration
|
||||||
+ */
|
+ */
|
||||||
@ -67,6 +67,7 @@ index 0000000000..c711498c3e
|
|||||||
+ bool active;
|
+ bool active;
|
||||||
+} PBSState;
|
+} PBSState;
|
||||||
+
|
+
|
||||||
|
+/* state is accessed via this static variable directly, 'opaque' is NULL */
|
||||||
+static PBSState pbs_state;
|
+static PBSState pbs_state;
|
||||||
+
|
+
|
||||||
+static void pbs_state_save_pending(QEMUFile *f, void *opaque,
|
+static void pbs_state_save_pending(QEMUFile *f, void *opaque,
|
||||||
@ -115,8 +116,9 @@ index 0000000000..c711498c3e
|
|||||||
+
|
+
|
||||||
+static bool pbs_state_is_active(void *opaque)
|
+static bool pbs_state_is_active(void *opaque)
|
||||||
+{
|
+{
|
||||||
+ // we need to be return active once, else .save_setup is never called, but,
|
+ /* we need to return active exactly once, else .save_setup is never called,
|
||||||
+ // if we'd just would return true, we'd freeze the migration for ~ 5 - 10s
|
+ * but if we'd just return true the migration doesn't make progress since
|
||||||
|
+ * it'd be waiting for us */
|
||||||
+ return pbs_state.active;
|
+ return pbs_state.active;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
@ -133,6 +135,12 @@ index 0000000000..c711498c3e
|
|||||||
+ return false;
|
+ return false;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
|
+static void pbs_state_save_cleanup(void *opaque)
|
||||||
|
+{
|
||||||
|
+ /* reset active after migration succeeds or fails */
|
||||||
|
+ pbs_state.active = false;
|
||||||
|
+}
|
||||||
|
+
|
||||||
+static SaveVMHandlers savevm_pbs_state_handlers = {
|
+static SaveVMHandlers savevm_pbs_state_handlers = {
|
||||||
+ .save_setup = pbs_state_save_setup,
|
+ .save_setup = pbs_state_save_setup,
|
||||||
+ .has_postcopy = pbs_state_has_postcopy,
|
+ .has_postcopy = pbs_state_has_postcopy,
|
||||||
@ -140,6 +148,7 @@ index 0000000000..c711498c3e
|
|||||||
+ .is_active_iterate = pbs_state_is_active_iterate,
|
+ .is_active_iterate = pbs_state_is_active_iterate,
|
||||||
+ .load_state = pbs_state_load,
|
+ .load_state = pbs_state_load,
|
||||||
+ .is_active = pbs_state_is_active,
|
+ .is_active = pbs_state_is_active,
|
||||||
|
+ .save_cleanup = pbs_state_save_cleanup,
|
||||||
+};
|
+};
|
||||||
+
|
+
|
||||||
+void pbs_state_mig_init(void)
|
+void pbs_state_mig_init(void)
|
||||||
@ -147,7 +156,7 @@ index 0000000000..c711498c3e
|
|||||||
+ pbs_state.active = true;
|
+ pbs_state.active = true;
|
||||||
+ register_savevm_live("pbs-state", 0, 1,
|
+ register_savevm_live("pbs-state", 0, 1,
|
||||||
+ &savevm_pbs_state_handlers,
|
+ &savevm_pbs_state_handlers,
|
||||||
+ &pbs_state);
|
+ NULL);
|
||||||
+}
|
+}
|
||||||
diff --git a/pve-backup.c b/pve-backup.c
|
diff --git a/pve-backup.c b/pve-backup.c
|
||||||
index c7cde0fb0e..f65f1dda26 100644
|
index c7cde0fb0e..f65f1dda26 100644
|
||||||
|
Loading…
Reference in New Issue
Block a user