X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Fzfs_arc.c;h=33646977b56228ee6c9ca2cf910e59bcd4bb0b12;hp=af4bfccb467baf84cd48f27b25f92e52d875972f;hb=48efd3deb4c9139fd060ff3d289896e9031bcc7c;hpb=a18496a4ac759552fd4dac1d2c661fb50285b1a1 diff --git a/src/zfs_arc.c b/src/zfs_arc.c index af4bfccb..33646977 100644 --- a/src/zfs_arc.c +++ b/src/zfs_arc.c @@ -29,8 +29,8 @@ #include "collectd.h" -#include "common.h" #include "plugin.h" +#include "utils/common/common.h" /* * Global variables @@ -99,6 +99,11 @@ static void free_zfs_values(kstat_t *ksp) { } #elif defined(KERNEL_SOLARIS) + +#if HAVE_KSTAT_H +#include +#endif + extern kstat_ctl_t *kc; static long long get_zfs_value(kstat_t *ksp, char *name) { @@ -122,7 +127,7 @@ static long long get_zfs_value(kstat_t *dummy __attribute__((unused)), 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) @@ -263,10 +268,17 @@ static int za_read(void) { 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.