#include "collectd.h"
-#include "common.h"
#include "plugin.h"
+#include "utils/common/common.h"
/*
* Global variables
}
#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) {
size_t valuelen = sizeof(value);
int rv;
- snprintf(buffer, sizeof(buffer), "%s%s", zfs_arcstat, name);
+ ssnprintf(buffer, sizeof(buffer), "%s%s", zfs_arcstat, name);
rv = sysctlbyname(buffer, (void *)&value, &valuelen,
/* new value = */ NULL, /* new length = */ (size_t)0);
if (rv == 0)
za_read_gauge(ksp, "mfu_size", "cache_size", "mfu_size");
za_read_gauge(ksp, "mru_ghost_size", "cache_size", "mru_ghost_size");
za_read_gauge(ksp, "mru_size", "cache_size", "mru_size");
- za_read_gauge(ksp, "other_size", "cache_size", "other_size");
za_read_gauge(ksp, "p", "cache_size", "p");
za_read_gauge(ksp, "size", "cache_size", "arc");
+ /* The "other_size" value was replaced by more specific values in ZFS on Linux
+ * version 0.7.0 (commit 25458cb)
+ */
+ if (za_read_gauge(ksp, "dbuf_size", "cache_size", "dbuf_size") != 0 ||
+ za_read_gauge(ksp, "dnode_size", "cache_size", "dnode_size") != 0 ||
+ za_read_gauge(ksp, "bonus_size", "cache_size", "bonus_size") != 0)
+ za_read_gauge(ksp, "other_size", "cache_size", "other_size");
+
/* 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.