Merge branch 'collectd-5.4' into collectd-5.5
[collectd.git] / src / zfs_arc.c
index b784ee3..ab5cd64 100644 (file)
@@ -186,7 +186,7 @@ static int za_read (void)
                return (-1);
        }
 
-       len = read_file_contents (ZOL_ARCSTATS_FILE, file_contents, sizeof(file_contents));
+       len = read_file_contents (ZOL_ARCSTATS_FILE, file_contents, sizeof(file_contents) - 1);
        if (len > 1)
        {
 
@@ -208,6 +208,12 @@ static int za_read (void)
                {
                        llentry_t *e;
                        llvalues = malloc(sizeof(long long int) * i);
+                       if (llvalues == NULL)
+                       {
+                               ERROR ("zfs_arc plugin: `malloc' failed.");
+                               llist_destroy (ksp);
+                               return (-1);
+                       }
                        int j = 0;
 
                        pnl = file_contents;
@@ -251,7 +257,14 @@ static int za_read (void)
 
        /* Sizes */
        za_read_gauge (ksp, "size",    "cache_size", "arc");
-       za_read_gauge (ksp, "l2_size", "cache_size", "L2");
+
+       /* The "l2_size" value has disappeared from Solaris some time in
+        * early 2013, and has only reappeared recently in Solaris 11.2.
+        * Stop trying if we ever fail to read it, so we don't spam the log.
+        */
+       static int l2_size_avail = 1;
+       if (l2_size_avail && za_read_gauge (ksp, "l2_size", "cache_size", "L2") != 0)
+               l2_size_avail = 0;
 
        /* Operations */
        za_read_derive (ksp, "deleted",  "cache_operation", "deleted");