ZFS port and thread_exit()

Konstantin Belousov kostikbel at gmail.com
Sat Feb 28 04:31:50 UTC 2015

While looking for some change to thread_exit(), I noted that ZFS
on FreeBSD directly calls thread_exit(). It simply cannot work,
thread_exit() is the internal function which requires the thread and
process state prepared for it call. Among most obvious things, process
spin lock must be held, but also several cleanups and accounting have to
be done before the call.

I believe the function just happens to have the same name as the Solaris
counterpart, and for some reasons it is never called. If this is true,
kthread_exit() should be used instead.

Also, I noted that the userspace port defines thread_exit() as
thr_exit(NULL). Again, the direct invocation of the syscall does not
look right. The libthr library must do some cleanups on the thread exit,
which are not done if syscall is invoked by an application code. Also,
the thread itself gets no destructor calls.

Could somebody interested in ZFS look into the issues ?

More information about the freebsd-threads mailing list