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