[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 1/4] migrate: add migration blockers
From: |
Anthony Liguori |
Subject: |
[Qemu-devel] [PATCH 1/4] migrate: add migration blockers |
Date: |
Fri, 11 Nov 2011 14:29:35 -0600 |
This lets different subsystems register an Error that is thrown whenever
migration is attempted. This works nicely because it gracefully supports
things like hotplug.
Right now, if multiple errors are registered, only one of them is reported.
I expect that for 1.1, we'll extend query-migrate to return all of the reasons
why migration is disabled at any given point in time.
Signed-off-by: Anthony Liguori <address@hidden>
---
migration.c | 18 ++++++++++++++++++
migration.h | 15 +++++++++++++++
2 files changed, 33 insertions(+), 0 deletions(-)
diff --git a/migration.c b/migration.c
index 41c3c24..6764d3a 100644
--- a/migration.c
+++ b/migration.c
@@ -398,6 +398,18 @@ static MigrationState *migrate_init(Monitor *mon, int
detach, int blk, int inc)
return s;
}
+static GSList *migration_blockers;
+
+void migrate_add_blocker(Error *reason)
+{
+ migration_blockers = g_slist_prepend(migration_blockers, reason);
+}
+
+void migrate_del_blocker(Error *reason)
+{
+ migration_blockers = g_slist_remove(migration_blockers, reason);
+}
+
int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data)
{
MigrationState *s = migrate_get_current();
@@ -417,6 +429,12 @@ int do_migrate(Monitor *mon, const QDict *qdict, QObject
**ret_data)
return -1;
}
+ if (migration_blockers) {
+ Error *err = migration_blockers->data;
+ qerror_report_err(err);
+ return -1;
+ }
+
s = migrate_init(mon, detach, blk, inc);
if (strstart(uri, "tcp:", &p)) {
diff --git a/migration.h b/migration.h
index 1b8ee58..0682179 100644
--- a/migration.h
+++ b/migration.h
@@ -17,6 +17,7 @@
#include "qdict.h"
#include "qemu-common.h"
#include "notify.h"
+#include "error.h"
typedef struct MigrationState MigrationState;
@@ -89,4 +90,18 @@ int ram_load(QEMUFile *f, void *opaque, int version_id);
extern int incoming_expected;
+/**
+ * @migrate_add_blocker - prevent migration from proceeding
+ *
+ * @reason - an error to be returned whenever migration is attempted
+ */
+void migrate_add_blocker(Error *reason);
+
+/**
+ * @migrate_del_blocker - remove a blocking error from migration
+ *
+ * @reason - the error blocking migration
+ */
+void migrate_del_blocker(Error *reason);
+
#endif
--
1.7.4.1
- [Qemu-devel] [PATCH 1/4] migrate: add migration blockers,
Anthony Liguori <=
- [Qemu-devel] [PATCH 4/4] qed: add migration blocker, Anthony Liguori, 2011/11/11
- [Qemu-devel] [PATCH 2/4] ivshmem: use migration blockers to prevent live migration in peer mode, Anthony Liguori, 2011/11/11
- [Qemu-devel] [PATCH 3/4] qcow2: add a migration blocker, Anthony Liguori, 2011/11/11
- Re: [Qemu-devel] [PATCH 3/4] qcow2: add a migration blocker, Stefan Hajnoczi, 2011/11/14
- Re: [Qemu-devel] [PATCH 3/4] qcow2: add a migration blocker, Anthony Liguori, 2011/11/14
- Re: [Qemu-devel] [PATCH 3/4] qcow2: add a migration blocker, Kevin Wolf, 2011/11/14
- Re: [Qemu-devel] [PATCH 3/4] qcow2: add a migration blocker, Stefan Hajnoczi, 2011/11/14
- Re: [Qemu-devel] [PATCH 3/4] qcow2: add a migration blocker, Anthony Liguori, 2011/11/14
- Re: [Qemu-devel] [PATCH 3/4] qcow2: add a migration blocker, Stefan Hajnoczi, 2011/11/14