From fcf37ec6c28f3d62773097c2fd0d5d56c4b2f2ff Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Thu, 26 Aug 2010 10:53:31 -0700 Subject: [PATCH 1/1] Fix stack dsl_dir_open_spa() Reduce stack usage by 256 bytes by moving buf char array from the stack to the heap. Signed-off-by: Brian Behlendorf --- module/zfs/dsl_dir.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/module/zfs/dsl_dir.c b/module/zfs/dsl_dir.c index ec1a6bb..6ebf17f 100644 --- a/module/zfs/dsl_dir.c +++ b/module/zfs/dsl_dir.c @@ -303,7 +303,7 @@ int dsl_dir_open_spa(spa_t *spa, const char *name, void *tag, dsl_dir_t **ddp, const char **tailp) { - char buf[MAXNAMELEN]; + char *buf; const char *next, *nextnext = NULL; int err; dsl_dir_t *dd; @@ -313,14 +313,15 @@ dsl_dir_open_spa(spa_t *spa, const char *name, void *tag, dprintf("%s\n", name); + buf = kmem_alloc(MAXNAMELEN, KM_SLEEP); err = getcomponent(name, buf, &next); if (err) - return (err); + goto error; if (spa == NULL) { err = spa_open(buf, &spa, FTAG); if (err) { dprintf("spa_open(%s) failed\n", buf); - return (err); + goto error; } openedspa = TRUE; @@ -336,7 +337,7 @@ dsl_dir_open_spa(spa_t *spa, const char *name, void *tag, rw_exit(&dp->dp_config_rwlock); if (openedspa) spa_close(spa, FTAG); - return (err); + goto error; } while (next != NULL) { @@ -372,7 +373,7 @@ dsl_dir_open_spa(spa_t *spa, const char *name, void *tag, dsl_dir_close(dd, tag); if (openedspa) spa_close(spa, FTAG); - return (err); + goto error; } /* @@ -391,6 +392,8 @@ dsl_dir_open_spa(spa_t *spa, const char *name, void *tag, if (openedspa) spa_close(spa, FTAG); *ddp = dd; +error: + kmem_free(buf, MAXNAMELEN); return (err); } -- 1.8.3.1