git://git.camperquake.de
/
zfs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix undersized buffer in is_shorthand_path()
[zfs.git]
/
module
/
zfs
/
dsl_dir.c
diff --git
a/module/zfs/dsl_dir.c
b/module/zfs/dsl_dir.c
index
ec1a6bb
..
224cc0a
100644
(file)
--- 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)
{
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;
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);
dprintf("%s\n", name);
+ buf = kmem_alloc(MAXNAMELEN, KM_SLEEP);
err = getcomponent(name, buf, &next);
if (err)
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);
if (spa == NULL) {
err = spa_open(buf, &spa, FTAG);
if (err) {
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);
if (openedspa)
spa_close(spa, FTAG);
rw_exit(&dp->dp_config_rwlock);
if (openedspa)
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);
if (openedspa)
spa_close(spa, FTAG);
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;
if (openedspa)
spa_close(spa, FTAG);
*ddp = dd;
+error:
+ kmem_free(buf, MAXNAMELEN);
return (err);
}
return (err);
}
@@
-1416,3
+1419,10
@@
dsl_dir_snap_cmtime_update(dsl_dir_t *dd)
dd->dd_snap_cmtime = t;
mutex_exit(&dd->dd_lock);
}
dd->dd_snap_cmtime = t;
mutex_exit(&dd->dd_lock);
}
+
+#if defined(_KERNEL) && defined(HAVE_SPL)
+EXPORT_SYMBOL(dsl_dir_set_quota);
+EXPORT_SYMBOL(dsl_dir_set_reservation);
+EXPORT_SYMBOL(dsl_dir_open);
+EXPORT_SYMBOL(dsl_dir_close);
+#endif