diff options
-rw-r--r-- | include/os/freebsd/spl/sys/proc.h | 23 | ||||
-rw-r--r-- | module/zfs/dmu_send.c | 2 | ||||
-rw-r--r-- | module/zfs/vdev_initialize.c | 2 | ||||
-rw-r--r-- | module/zfs/vdev_removal.c | 2 | ||||
-rw-r--r-- | module/zfs/vdev_trim.c | 2 |
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(); } /* |