aboutsummaryrefslogtreecommitdiff
path: root/qapi
diff options
context:
space:
mode:
authorMichael Roth <mdroth@linux.vnet.ibm.com>2012-04-17 19:01:45 -0500
committerMichael Roth <mdroth@linux.vnet.ibm.com>2012-04-30 08:42:10 -0500
commitf22d85e9e67262db34504f4079745f9843da6a92 (patch)
tree4eb65b26bec47ed0b9b9f6014ad5278b1e89f048 /qapi
parent9e8aded432884477bcd4fa1c7e849a196412bcc4 (diff)
downloadqemu-f22d85e9e67262db34504f4079745f9843da6a92.zip
qemu-f22d85e9e67262db34504f4079745f9843da6a92.tar.gz
qemu-f22d85e9e67262db34504f4079745f9843da6a92.tar.bz2
qemu-ga: add a whitelist for fsfreeze-safe commands
Currently we rely on fsfreeze/thaw commands disabling/enabling logging then having other commands check whether logging is disabled to avoid executing if they aren't safe for running while a filesystem is frozen. Instead, have an explicit whitelist of fsfreeze-safe commands, and consolidate logging and command enablement/disablement into a pair of helper functions: ga_set_frozen()/ga_unset_frozen() Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Diffstat (limited to 'qapi')
-rw-r--r--qapi/qmp-core.h1
-rw-r--r--qapi/qmp-registry.c14
2 files changed, 13 insertions, 2 deletions
diff --git a/qapi/qmp-core.h b/qapi/qmp-core.h
index 3bb3acb..431ddbb 100644
--- a/qapi/qmp-core.h
+++ b/qapi/qmp-core.h
@@ -38,6 +38,7 @@ void qmp_register_command(const char *name, QmpCommandFunc *fn);
QmpCommand *qmp_find_command(const char *name);
QObject *qmp_dispatch(QObject *request);
void qmp_disable_command(const char *name);
+void qmp_enable_command(const char *name);
bool qmp_command_is_enabled(const char *name);
char **qmp_get_command_list(void);
diff --git a/qapi/qmp-registry.c b/qapi/qmp-registry.c
index 25c89ad..43d5cde 100644
--- a/qapi/qmp-registry.c
+++ b/qapi/qmp-registry.c
@@ -40,18 +40,28 @@ QmpCommand *qmp_find_command(const char *name)
return NULL;
}
-void qmp_disable_command(const char *name)
+static void qmp_toggle_command(const char *name, bool enabled)
{
QmpCommand *cmd;
QTAILQ_FOREACH(cmd, &qmp_commands, node) {
if (strcmp(cmd->name, name) == 0) {
- cmd->enabled = false;
+ cmd->enabled = enabled;
return;
}
}
}
+void qmp_disable_command(const char *name)
+{
+ qmp_toggle_command(name, false);
+}
+
+void qmp_enable_command(const char *name)
+{
+ qmp_toggle_command(name, true);
+}
+
bool qmp_command_is_enabled(const char *name)
{
QmpCommand *cmd;