Add fix-stack-dsl_dir_open_spa topic branch

Reduce stack usage by 256 bytes by moving buf char array from
the stack to the heap.
This commit is contained in:
Brian Behlendorf 2010-06-16 12:39:44 -07:00
parent 428870ff73
commit 0c524122bd
3 changed files with 16 additions and 5 deletions

1
.topdeps Normal file
View File

@ -0,0 +1 @@
master

7
.topmsg Normal file
View File

@ -0,0 +1,7 @@
From: Brian Behlendorf <behlendorf1@llnl.gov>
Subject: [PATCH] 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 <behlendorf1@llnl.gov>

View File

@ -303,7 +303,7 @@ int
dsl_dir_open_spa(spa_t *spa, const char *name, void *tag, dsl_dir_open_spa(spa_t *spa, const char *name, void *tag,
dsl_dir_t **ddp, const char **tailp) dsl_dir_t **ddp, const char **tailp)
{ {
char buf[MAXNAMELEN]; char *buf;
const char *next, *nextnext = NULL; const char *next, *nextnext = NULL;
int err; int err;
dsl_dir_t *dd; dsl_dir_t *dd;
@ -313,14 +313,15 @@ dsl_dir_open_spa(spa_t *spa, const char *name, void *tag,
dprintf("%s\n", name); dprintf("%s\n", name);
buf = kmem_alloc(MAXNAMELEN, KM_SLEEP);
err = getcomponent(name, buf, &next); err = getcomponent(name, buf, &next);
if (err) if (err)
return (err); goto error;
if (spa == NULL) { if (spa == NULL) {
err = spa_open(buf, &spa, FTAG); err = spa_open(buf, &spa, FTAG);
if (err) { if (err) {
dprintf("spa_open(%s) failed\n", buf); dprintf("spa_open(%s) failed\n", buf);
return (err); goto error;
} }
openedspa = TRUE; openedspa = TRUE;
@ -336,7 +337,7 @@ dsl_dir_open_spa(spa_t *spa, const char *name, void *tag,
rw_exit(&dp->dp_config_rwlock); rw_exit(&dp->dp_config_rwlock);
if (openedspa) if (openedspa)
spa_close(spa, FTAG); spa_close(spa, FTAG);
return (err); goto error;
} }
while (next != NULL) { while (next != NULL) {
@ -372,7 +373,7 @@ dsl_dir_open_spa(spa_t *spa, const char *name, void *tag,
dsl_dir_close(dd, tag); dsl_dir_close(dd, tag);
if (openedspa) if (openedspa)
spa_close(spa, FTAG); 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) if (openedspa)
spa_close(spa, FTAG); spa_close(spa, FTAG);
*ddp = dd; *ddp = dd;
error:
kmem_free(buf, MAXNAMELEN);
return (err); return (err);
} }