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
Move iput() after zfs_inode_update()
[zfs.git]
/
module
/
zfs
/
dsl_dir.c
diff --git
a/module/zfs/dsl_dir.c
b/module/zfs/dsl_dir.c
index
ec1a6bb
..
d615832
100644
(file)
--- a/
module/zfs/dsl_dir.c
+++ b/
module/zfs/dsl_dir.c
@@
-96,7
+96,7
@@
dsl_dir_open_obj(dsl_pool_t *dp, uint64_t ddobj,
if (dd == NULL) {
dsl_dir_t *winner;
if (dd == NULL) {
dsl_dir_t *winner;
- dd = kmem_zalloc(sizeof (dsl_dir_t), KM_
SLEEP
);
+ dd = kmem_zalloc(sizeof (dsl_dir_t), KM_
PUSHPAGE
);
dd->dd_object = ddobj;
dd->dd_dbuf = dbuf;
dd->dd_pool = dp;
dd->dd_object = ddobj;
dd->dd_dbuf = dbuf;
dd->dd_pool = dp;
@@
-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);
}
@@
-788,7
+791,7
@@
dsl_dir_tempreserve_impl(dsl_dir_t *dd, uint64_t asize, boolean_t netfree,
asize - ref_rsrv);
mutex_exit(&dd->dd_lock);
asize - ref_rsrv);
mutex_exit(&dd->dd_lock);
- tr = kmem_zalloc(sizeof (struct tempreserve), KM_
SLEEP
);
+ tr = kmem_zalloc(sizeof (struct tempreserve), KM_
PUSHPAGE
);
tr->tr_ds = dd;
tr->tr_size = asize;
list_insert_tail(tr_list, tr);
tr->tr_ds = dd;
tr->tr_size = asize;
list_insert_tail(tr_list, tr);
@@
-822,7
+825,7
@@
dsl_dir_tempreserve_space(dsl_dir_t *dd, uint64_t lsize, uint64_t asize,
return (0);
}
return (0);
}
- tr_list = kmem_alloc(sizeof (list_t), KM_
SLEEP
);
+ tr_list = kmem_alloc(sizeof (list_t), KM_
PUSHPAGE
);
list_create(tr_list, sizeof (struct tempreserve),
offsetof(struct tempreserve, tr_node));
ASSERT3S(asize, >, 0);
list_create(tr_list, sizeof (struct tempreserve),
offsetof(struct tempreserve, tr_node));
ASSERT3S(asize, >, 0);
@@
-832,7
+835,7
@@
dsl_dir_tempreserve_space(dsl_dir_t *dd, uint64_t lsize, uint64_t asize,
if (err == 0) {
struct tempreserve *tr;
if (err == 0) {
struct tempreserve *tr;
- tr = kmem_zalloc(sizeof (struct tempreserve), KM_
SLEEP
);
+ tr = kmem_zalloc(sizeof (struct tempreserve), KM_
PUSHPAGE
);
tr->tr_size = lsize;
list_insert_tail(tr_list, tr);
tr->tr_size = lsize;
list_insert_tail(tr_list, tr);
@@
-848,7
+851,7
@@
dsl_dir_tempreserve_space(dsl_dir_t *dd, uint64_t lsize, uint64_t asize,
if (err == 0) {
struct tempreserve *tr;
if (err == 0) {
struct tempreserve *tr;
- tr = kmem_zalloc(sizeof (struct tempreserve), KM_
SLEEP
);
+ tr = kmem_zalloc(sizeof (struct tempreserve), KM_
PUSHPAGE
);
tr->tr_dp = dd->dd_pool;
tr->tr_size = asize;
list_insert_tail(tr_list, tr);
tr->tr_dp = dd->dd_pool;
tr->tr_size = asize;
list_insert_tail(tr_list, tr);
@@
-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