aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Norris <robn@despairlabs.com>2024-04-28 01:03:11 +0000
committerBrian Behlendorf <behlendorf1@llnl.gov>2024-05-01 17:51:44 +0000
commit4429ad9276cea193bb29463a7d6c38367d0d78ce (patch)
treec8d3b13c3996a732dc9d439e8cb35661a4c93936
parent7ac00d3c26652892e01956af29d087362ab29410 (diff)
downloadsrc-4429ad9276cea193bb29463a7d6c38367d0d78ce.tar.gz
src-4429ad9276cea193bb29463a7d6c38367d0d78ce.zip
libzpool: set thread names
Arrange for the thread/task name to be set when new threads are created. This makes them visible in the process table etc. pthread_setname_np() is generally available in glibc, musl and FreeBSD, so no test is required. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Rob Norris <robn@despairlabs.com> Sponsored-by: https://despairlabs.com/sponsor/ Closes #16140
-rw-r--r--include/sys/zfs_context.h8
-rw-r--r--lib/libzpool/kernel.c5
-rw-r--r--lib/libzpool/taskq.c4
3 files changed, 10 insertions, 7 deletions
diff --git a/include/sys/zfs_context.h b/include/sys/zfs_context.h
index 9ec2f73b366c..8f264b50e995 100644
--- a/include/sys/zfs_context.h
+++ b/include/sys/zfs_context.h
@@ -228,9 +228,9 @@ typedef pthread_t kthread_t;
#define thread_create_named(name, stk, stksize, func, arg, len, \
pp, state, pri) \
- zk_thread_create(func, arg, stksize, state)
+ zk_thread_create(name, func, arg, stksize, state)
#define thread_create(stk, stksize, func, arg, len, pp, state, pri) \
- zk_thread_create(func, arg, stksize, state)
+ zk_thread_create(#func, func, arg, stksize, state)
#define thread_exit() pthread_exit(NULL)
#define thread_join(t) pthread_join((pthread_t)(t), NULL)
@@ -246,8 +246,8 @@ extern struct proc p0;
#define PS_NONE -1
-extern kthread_t *zk_thread_create(void (*func)(void *), void *arg,
- size_t stksize, int state);
+extern kthread_t *zk_thread_create(const char *name, void (*func)(void *),
+ void *arg, size_t stksize, int state);
#define issig(why) (FALSE)
#define ISSIG(thr, why) (FALSE)
diff --git a/lib/libzpool/kernel.c b/lib/libzpool/kernel.c
index ffad7fc02bc9..a3930ee07f73 100644
--- a/lib/libzpool/kernel.c
+++ b/lib/libzpool/kernel.c
@@ -92,7 +92,8 @@ zk_thread_wrapper(void *arg)
}
kthread_t *
-zk_thread_create(void (*func)(void *), void *arg, size_t stksize, int state)
+zk_thread_create(const char *name, void (*func)(void *), void *arg,
+ size_t stksize, int state)
{
pthread_attr_t attr;
pthread_t tid;
@@ -140,6 +141,8 @@ zk_thread_create(void (*func)(void *), void *arg, size_t stksize, int state)
VERIFY0(pthread_create(&tid, &attr, zk_thread_wrapper, ztw));
VERIFY0(pthread_attr_destroy(&attr));
+ pthread_setname_np(tid, name);
+
return ((void *)(uintptr_t)tid);
}
diff --git a/lib/libzpool/taskq.c b/lib/libzpool/taskq.c
index 99a181ec3c93..5fb2283cf0b1 100644
--- a/lib/libzpool/taskq.c
+++ b/lib/libzpool/taskq.c
@@ -295,8 +295,8 @@ taskq_create(const char *name, int nthreads, pri_t pri,
}
for (t = 0; t < nthreads; t++)
- VERIFY((tq->tq_threadlist[t] = thread_create(NULL, 0,
- taskq_thread, tq, 0, &p0, TS_RUN, pri)) != NULL);
+ VERIFY((tq->tq_threadlist[t] = thread_create_named(tq->tq_name,
+ NULL, 0, taskq_thread, tq, 0, &p0, TS_RUN, pri)) != NULL);
return (tq);
}