[PATCH 16/21] virPerfReadEvent: Refactor to return -errno on failure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The function didn't comply with libvirt's error reporting scheme as it
reported libvirt errors only sometimes. As callers may want to ignore
errors convert it to returning -errno on failure instead.

Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx>
---
 src/qemu/qemu_driver.c |  6 +++++-
 src/util/virperf.c     | 19 ++++++++++---------
 2 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index efb6e2c454..e5d5c8c484 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -17581,9 +17581,13 @@ qemuDomainGetStatsPerfOneEvent(virPerf *perf,
                                virTypedParamList *params)
 {
     uint64_t value = 0;
+    int rv;

-    if (virPerfReadEvent(perf, type, &value) < 0)
+    if ((rv = virPerfReadEvent(perf, type, &value)) < 0) {
+        virReportSystemError(-rv, "%s",
+                             _("Unable to read cache data"));
         return -1;
+    }

     virTypedParamListAddULLong(params, value, "perf.%s", virPerfEventTypeToString(type));

diff --git a/src/util/virperf.c b/src/util/virperf.c
index 91f2ca632a..7f0253d5b2 100644
--- a/src/util/virperf.c
+++ b/src/util/virperf.c
@@ -290,6 +290,12 @@ bool virPerfEventIsEnabled(virPerf *perf,
     return perf && perf->events[type].enabled;
 }

+
+/**
+ * virPerfReadEvent:
+ *
+ * Returns 0 on success -ERRNO on failure.
+ */
 int
 virPerfReadEvent(virPerf *perf,
                  virPerfEventType type,
@@ -297,13 +303,10 @@ virPerfReadEvent(virPerf *perf,
 {
     struct virPerfEvent *event = &perf->events[type];
     if (!event->enabled)
-        return -1;
+        return -EINVAL;

-    if (saferead(event->fd, value, sizeof(uint64_t)) < 0) {
-        virReportSystemError(errno, "%s",
-                             _("Unable to read cache data"));
-        return -1;
-    }
+    if (saferead(event->fd, value, sizeof(uint64_t)) < 0)
+        return -errno;

     if (type == VIR_PERF_EVENT_CMT)
         *value *= event->efields.cmt.scale;
@@ -350,9 +353,7 @@ virPerfReadEvent(virPerf *perf G_GNUC_UNUSED,
                  virPerfEventType type G_GNUC_UNUSED,
                  uint64_t *value G_GNUC_UNUSED)
 {
-    virReportSystemError(ENXIO, "%s",
-                         _("Perf not supported on this platform"));
-    return -1;
+    return -ENOSYS;
 }

 #endif
-- 
2.48.1




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux