Index: sys/task.h =================================================================== RCS file: /cvs/src/sys/sys/task.h,v diff -u -p -r1.18 task.h --- sys/task.h 1 Aug 2020 08:40:20 -0000 1.18 +++ sys/task.h 2 Jan 2025 10:32:04 -0000 @@ -49,7 +49,7 @@ struct taskq *taskq_create(const char *, void taskq_destroy(struct taskq *); void taskq_barrier(struct taskq *); -void taskq_del_barrier(struct taskq *, struct task *); +int taskq_del_barrier(struct taskq *, struct task *); void task_set(struct task *, void (*)(void *), void *); int task_add(struct taskq *, struct task *); Index: kern/kern_task.c =================================================================== RCS file: /cvs/src/sys/kern/kern_task.c,v diff -u -p -r1.35 kern_task.c --- kern/kern_task.c 14 May 2024 08:26:13 -0000 1.35 +++ kern/kern_task.c 2 Jan 2025 10:32:04 -0000 @@ -269,13 +270,15 @@ taskq_barrier_task(void *p) mtx_leave(&tq->tq_mtx); } -static void -taskq_do_barrier(struct taskq *tq) +void +taskq_barrier(struct taskq *tq) { struct task t = TASK_INITIALIZER(taskq_barrier_task, tq); struct proc *thread = curproc; struct taskq_thread *tt; + WITNESS_CHECKORDER(&tq->tq_lock_object, LOP_NEWORDER, NULL); + mtx_enter(&tq->tq_mtx); tq->tq_barriers++; @@ -320,23 +323,15 @@ taskq_do_barrier(struct taskq *tq) mtx_leave(&tq->tq_mtx); } -void -taskq_barrier(struct taskq *tq) -{ - WITNESS_CHECKORDER(&tq->tq_lock_object, LOP_NEWORDER, NULL); - - taskq_do_barrier(tq); -} - -void +int taskq_del_barrier(struct taskq *tq, struct task *t) { - WITNESS_CHECKORDER(&tq->tq_lock_object, LOP_NEWORDER, NULL); + int removed; - if (task_del(tq, t)) - return; + removed = task_del(tq, t); + taskq_barrier(tq); - taskq_do_barrier(tq); + return (removed); } void Index: kern/kern_timeout.c =================================================================== RCS file: /cvs/src/sys/kern/kern_timeout.c,v diff -u -p -r1.100 kern_timeout.c --- kern/kern_timeout.c 7 Nov 2024 16:02:29 -0000 1.100 +++ kern/kern_timeout.c 2 Jan 2025 10:32:04 -0000 @@ -457,8 +458,7 @@ timeout_del_barrier(struct timeout *to) timeout_sync_order(ISSET(to->to_flags, TIMEOUT_PROC)); removed = timeout_del(to); - if (!removed) - timeout_barrier(to); + timeout_barrier(to); return removed; }