From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: gaurkuma Date: Fri, 11 Aug 2017 08:53:35 -0700 Subject: [PATCH] Allow longer SPA names in stats MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Brian Behlendorf Reviewed-by: Giuseppe Di Natale Signed-off-by: gaurkuma Closes #641 (cherry picked from commit cbf0dff3d8a13c2b4e547321ff2005055521e5ee) Signed-off-by: Fabian Grünbichler --- include/sys/kstat.h | 2 +- module/spl/spl-kstat.c | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/include/sys/kstat.h b/include/sys/kstat.h index faf6b81..7862ab0 100644 --- a/include/sys/kstat.h +++ b/include/sys/kstat.h @@ -32,7 +32,7 @@ #include #include -#define KSTAT_STRLEN 31 +#define KSTAT_STRLEN 255 #define KSTAT_RAW_MAX (128*1024) /* For reference valid classes are: diff --git a/module/spl/spl-kstat.c b/module/spl/spl-kstat.c index e306915..ed52653 100644 --- a/module/spl/spl-kstat.c +++ b/module/spl/spl-kstat.c @@ -614,21 +614,26 @@ kstat_detect_collision(kstat_t *ksp) { kstat_module_t *module; kstat_t *tmp; - char parent[KSTAT_STRLEN+1]; + char *parent; char *cp; - (void) strlcpy(parent, ksp->ks_module, sizeof(parent)); + parent = kmem_asprintf("%s", ksp->ks_module); - if ((cp = strrchr(parent, '/')) == NULL) + if ((cp = strrchr(parent, '/')) == NULL) { + strfree(parent); return (0); + } cp[0] = '\0'; if ((module = kstat_find_module(parent)) != NULL) { list_for_each_entry(tmp, &module->ksm_kstat_list, ks_list) - if (strncmp(tmp->ks_name, cp+1, KSTAT_STRLEN) == 0) + if (strncmp(tmp->ks_name, cp+1, KSTAT_STRLEN) == 0) { + strfree(parent); return (EEXIST); + } } + strfree(parent); return (0); } -- 2.14.2