Blob Blame History Raw
From 7d00aff7e3a78d5d03a9191e46975e699cf89e03 Mon Sep 17 00:00:00 2001
Message-Id: <7d00aff7e3a78d5d03a9191e46975e699cf89e03@dist-git>
From: Jiri Denemark <jdenemar@redhat.com>
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 <jdenemar@redhat.com>
---
 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