X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fzfs_arc.c;h=2edba6d1b68d4abc803b06145d6b2f5376503eca;hb=0e6248ffcaea42b5ea501035f92bedfaf983cad9;hp=b8bccde72ada5bfc8f1e2fa63a6040dd21239d06;hpb=95c5059366e252f2a5e847993d3a429a8c8aa7c5;p=collectd.git diff --git a/src/zfs_arc.c b/src/zfs_arc.c index b8bccde7..2edba6d1 100644 --- a/src/zfs_arc.c +++ b/src/zfs_arc.c @@ -2,6 +2,7 @@ * collectd - src/zfs_arc.c * Copyright (C) 2009 Anthony Dewhurst * Copyright (C) 2012 Aurelien Rougemont + * Copyright (C) 2013 Xin Li * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -19,6 +20,7 @@ * Authors: * Anthony Dewhurst * Aurelien Rougemont + * Xin Li **/ #include "collectd.h" @@ -47,23 +49,19 @@ const char zfs_arcstat[] = "kstat.zfs.misc.arcstats."; typedef void kstat_t; #endif -static long long get_zfs_value(void * dummy __unused, const char *kstat_value) +static long long get_zfs_value(kstat_t *dummy __attribute__((unused)), + char const *name) { + char buffer[256]; long long value; size_t valuelen = sizeof(value); int rv; - char *key; - - key = ssnprintf_alloc("%s%s", zfs_arcstat, kstat_value); - if (key != NULL) { - if (strlen(key) > 0) { - rv = sysctlbyname(key, (void *)&value, &valuelen, NULL, (size_t)0); - free(key); - if (rv == 0) - return (value); - } else - free(key); - } + + 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) + return (value); return (-1); } @@ -162,16 +160,16 @@ static int za_read (void) za_read_gauge (ksp, "size", "cache_size", "arc"); za_read_gauge (ksp, "l2_size", "cache_size", "L2"); - /* Operations */ + /* Operations */ za_read_derive (ksp, "allocated","cache_operation", "allocated"); za_read_derive (ksp, "deleted", "cache_operation", "deleted"); za_read_derive (ksp, "stolen", "cache_operation", "stolen"); - /* Issue indicators */ - za_read_derive (ksp, "mutex_miss", "mutex_operations", "miss"); + /* Issue indicators */ + za_read_derive (ksp, "mutex_miss", "mutex_operations", "miss"); za_read_derive (ksp, "hash_collisions", "hash_collisions", ""); - /* Evictions */ + /* Evictions */ za_read_derive (ksp, "evict_l2_cached", "cache_eviction", "cached"); za_read_derive (ksp, "evict_l2_eligible", "cache_eviction", "eligible"); za_read_derive (ksp, "evict_l2_ineligible", "cache_eviction", "ineligible");