From 7d00aff7e3a78d5d03a9191e46975e699cf89e03 Mon Sep 17 00:00:00 2001 Message-Id: <7d00aff7e3a78d5d03a9191e46975e699cf89e03@dist-git> From: Jiri Denemark Date: Thu, 9 Oct 2014 10:38:39 +0200 Subject: [PATCH] RHEL: Add support for QMP I/O error reason RHEL-only, obsoletes older RHEL-only commit 8d2d15ec73393f360a1bf7b88ee2cb491efad037 Adds support for __com.redhat_reason on I/O error events. The code will fallback to upstream nospace boolean if the reason is not present and complain if neither of these is found. https://bugzilla.redhat.com/show_bug.cgi?id=1119784 Signed-off-by: Jiri Denemark --- src/qemu/qemu_monitor_json.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 7dcea2e..cad6be8 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -722,7 +722,7 @@ qemuMonitorJSONHandleIOError(qemuMonitorPtr mon, virJSONValuePtr data) { const char *device; const char *action; - const char *reason = ""; + const char *reason; bool nospc = false; int actionID; @@ -739,8 +739,14 @@ qemuMonitorJSONHandleIOError(qemuMonitorPtr mon, virJSONValuePtr data) VIR_WARN("missing device in disk io error event"); } - if (virJSONValueObjectGetBoolean(data, "nospace", &nospc) == 0 && nospc) - reason = "enospc"; + reason = virJSONValueObjectGetString(data, "__com.redhat_reason"); + if (!reason) { + if (virJSONValueObjectGetBoolean(data, "nospace", &nospc) != 0) { + VIR_WARN("neither __com.redhat_reason nor nospace found in disk " + "io error event"); + } + reason = nospc ? "enospc" : ""; + } if ((actionID = qemuMonitorIOErrorActionTypeFromString(action)) < 0) { VIR_WARN("unknown disk io error action '%s'", action); -- 2.1.3