dsl_dir_evict(dmu_buf_t *db, void *arg)
{
dsl_dir_t *dd = arg;
- dsl_pool_t *dp = dd->dd_pool;
+ ASSERTV(dsl_pool_t *dp = dd->dd_pool;)
int t;
for (t = 0; t < TXG_SIZE; t++) {
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;
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;
rw_exit(&dp->dp_config_rwlock);
if (openedspa)
spa_close(spa, FTAG);
- return (err);
+ goto error;
}
while (next != NULL) {
dsl_dir_close(dd, tag);
if (openedspa)
spa_close(spa, FTAG);
- return (err);
+ goto error;
}
/*
if (openedspa)
spa_close(spa, FTAG);
*ddp = dd;
+error:
+ kmem_free(buf, MAXNAMELEN);
return (err);
}
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