summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/os/freebsd/spl/sys/proc.h23
-rw-r--r--module/zfs/dmu_send.c2
-rw-r--r--module/zfs/vdev_initialize.c2
-rw-r--r--module/zfs/vdev_removal.c2
-rw-r--r--module/zfs/vdev_trim.c2
5 files changed, 9 insertions, 22 deletions
diff --git a/include/os/freebsd/spl/sys/proc.h b/include/os/freebsd/spl/sys/proc.h
index 07201dd6a..fdb2126d6 100644
--- a/include/os/freebsd/spl/sys/proc.h
+++ b/include/os/freebsd/spl/sys/proc.h
@@ -63,28 +63,12 @@ typedef struct proc proc_t;
extern struct proc *zfsproc;
-struct thread_wrap {
- void *tw_arg;
- void (*tw_proc)(void*);
-};
-
-static __inline void
-solthread_wrapper(void *arg)
-{
- struct thread_wrap *tw = arg;
-
- tw->tw_proc(tw->tw_arg);
- free(tw, M_SOLARIS);
- kthread_exit();
-}
-
static __inline kthread_t *
do_thread_create(caddr_t stk, size_t stksize, void (*proc)(void *), void *arg,
size_t len, proc_t *pp, int state, pri_t pri)
{
kthread_t *td = NULL;
int error;
- struct thread_wrap *tw;
/*
* Be sure there are no surprises.
@@ -92,11 +76,8 @@ do_thread_create(caddr_t stk, size_t stksize, void (*proc)(void *), void *arg,
ASSERT(stk == NULL);
ASSERT(len == 0);
ASSERT(state == TS_RUN);
- tw = malloc(sizeof (*tw), M_SOLARIS, M_WAITOK);
- tw->tw_proc = proc;
- tw->tw_arg = arg;
- error = kproc_kthread_add(solthread_wrapper, tw, &zfsproc, &td,
+ error = kproc_kthread_add(proc, arg, &zfsproc, &td,
RFSTOPPED, stksize / PAGE_SIZE, "zfskern", "solthread %p", proc);
if (error == 0) {
thread_lock(td);
@@ -105,8 +86,6 @@ do_thread_create(caddr_t stk, size_t stksize, void (*proc)(void *), void *arg,
#if __FreeBSD_version < 1300068
thread_unlock(td);
#endif
- } else {
- free(tw, M_SOLARIS);
}
return (td);
}
diff --git a/module/zfs/dmu_send.c b/module/zfs/dmu_send.c
index 9069f7e7d..a5df78edd 100644
--- a/module/zfs/dmu_send.c
+++ b/module/zfs/dmu_send.c
@@ -1319,6 +1319,8 @@ redact_list_thread(void *arg)
record = range_alloc(DATA, 0, 0, 0, B_TRUE);
bqueue_enqueue_flush(&rlt_arg->q, record, sizeof (*record));
spl_fstrans_unmark(cookie);
+
+ thread_exit();
}
/*
diff --git a/module/zfs/vdev_initialize.c b/module/zfs/vdev_initialize.c
index 5899af9fc..0d45d9958 100644
--- a/module/zfs/vdev_initialize.c
+++ b/module/zfs/vdev_initialize.c
@@ -558,6 +558,8 @@ vdev_initialize_thread(void *arg)
vd->vdev_initialize_thread = NULL;
cv_broadcast(&vd->vdev_initialize_cv);
mutex_exit(&vd->vdev_initialize_lock);
+
+ thread_exit();
}
/*
diff --git a/module/zfs/vdev_removal.c b/module/zfs/vdev_removal.c
index dee46f4b3..3f4f9091f 100644
--- a/module/zfs/vdev_removal.c
+++ b/module/zfs/vdev_removal.c
@@ -1595,6 +1595,8 @@ spa_vdev_remove_thread(void *arg)
ASSERT0(range_tree_space(svr->svr_allocd_segs));
vdev_remove_complete(spa);
}
+
+ thread_exit();
}
void
diff --git a/module/zfs/vdev_trim.c b/module/zfs/vdev_trim.c
index 137ba83df..b0cd40f68 100644
--- a/module/zfs/vdev_trim.c
+++ b/module/zfs/vdev_trim.c
@@ -896,6 +896,8 @@ vdev_trim_thread(void *arg)
vd->vdev_trim_thread = NULL;
cv_broadcast(&vd->vdev_trim_cv);
mutex_exit(&vd->vdev_trim_lock);
+
+ thread_exit();
}
/*