Merge pull request #2618 from ajssmith/amqp1_dev1_branch
[collectd.git] / src / zfs_arc.c
index 3ef3e56..c9abdd5 100644 (file)
 /*
  * Global variables
  */
+static value_to_rate_state_t arc_hits_state;
+static value_to_rate_state_t arc_misses_state;
+static value_to_rate_state_t l2_hits_state;
+static value_to_rate_state_t l2_misses_state;
 
 #if defined(KERNEL_LINUX)
 #include "utils_llist.h"
@@ -95,6 +99,11 @@ static void free_zfs_values(kstat_t *ksp) {
 }
 
 #elif defined(KERNEL_SOLARIS)
+
+#if HAVE_KSTAT_H
+#include <kstat.h>
+#endif
+
 extern kstat_ctl_t *kc;
 
 static long long get_zfs_value(kstat_t *ksp, char *name) {
@@ -188,9 +197,6 @@ static void za_submit_ratio(const char *type_instance, gauge_t hits,
   za_submit_gauge("cache_ratio", type_instance, ratio);
 }
 
-static value_to_rate_state_t arc_hits_state, arc_misses_state, l2_hits_state,
-    l2_misses_state;
-
 static int za_read(void) {
   gauge_t arc_hits, arc_misses, l2_hits, l2_misses;
   kstat_t *ksp = NULL;
@@ -201,32 +207,26 @@ static int za_read(void) {
 
   fh = fopen(ZOL_ARCSTATS_FILE, "r");
   if (fh == NULL) {
-    char errbuf[1024];
     ERROR("zfs_arc plugin: Opening \"%s\" failed: %s", ZOL_ARCSTATS_FILE,
-          sstrerror(errno, errbuf, sizeof(errbuf)));
-    return -1;
-  }
-
-  ksp = llist_create();
-  if (ksp == NULL) {
-    ERROR("zfs_arc plugin: `llist_create' failed.");
-    fclose(fh);
+          STRERRNO);
     return -1;
   }
 
-  // Ignore the first two lines because they contain information about
-  // the rest of the file.
-  // See kstat_seq_show_headers module/spl/spl-kstat.c of the spl kernel
-  // module.
-  if (fgets(buffer, sizeof(buffer), fh) == NULL) {
-    ERROR("zfs_arc plugin: \"%s\" does not contain a single line.",
+  /* Ignore the first two lines because they contain information about the rest
+   * of the file.
+   * See kstat_seq_show_headers module/spl/spl-kstat.c of the spl kernel module.
+   */
+  if ((fgets(buffer, sizeof(buffer), fh) == NULL) ||
+      (fgets(buffer, sizeof(buffer), fh) == NULL)) {
+    ERROR("zfs_arc plugin: \"%s\" does not contain at least two lines.",
           ZOL_ARCSTATS_FILE);
     fclose(fh);
     return -1;
   }
-  if (fgets(buffer, sizeof(buffer), fh) == NULL) {
-    ERROR("zfs_arc plugin: \"%s\" does not contain at least two lines.",
-          ZOL_ARCSTATS_FILE);
+
+  ksp = llist_create();
+  if (ksp == NULL) {
+    ERROR("zfs_arc plugin: `llist_create' failed.");
     fclose(fh);
     return -1;
   }
@@ -361,11 +361,6 @@ static int za_init(void) /* {{{ */
   }
 #endif
 
-  memset(&arc_hits_state, 0, sizeof(arc_hits_state));
-  memset(&arc_misses_state, 0, sizeof(arc_misses_state));
-  memset(&l2_hits_state, 0, sizeof(l2_hits_state));
-  memset(&l2_misses_state, 0, sizeof(l2_misses_state));
-
   return 0;
 } /* }}} int za_init */