From 2420ee6e12cb4bc4918fc88d44d59b486b86e58b Mon Sep 17 00:00:00 2001 From: Rob Norris Date: Sat, 24 Aug 2024 03:40:45 +1000 Subject: [PATCH] spl-taskq: fix task counts for delayed and cancelled tasks Dispatched delayed tasks were not added to tasks_total, and cancelled tasks were not removed. This notably could make tasks_total go to UNIT64_MAX, but just generally meant the count could be wrong. So lets not! Sponsored-by: Klara, Inc. Sponsored-by: Syneto Reviewed-by: Brian Behlendorf Signed-off-by: Rob Norris Closes #16473 --- module/os/linux/spl/spl-taskq.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/module/os/linux/spl/spl-taskq.c b/module/os/linux/spl/spl-taskq.c index 29b8f5426..c16bc9bc6 100644 --- a/module/os/linux/spl/spl-taskq.c +++ b/module/os/linux/spl/spl-taskq.c @@ -620,6 +620,7 @@ taskq_cancel_id(taskq_t *tq, taskqid_t id) if (t && t != ERR_PTR(-EBUSY)) { list_del_init(&t->tqent_list); TQSTAT_DEC_LIST(tq, t); + TQSTAT_DEC(tq, tasks_total); t->tqent_flags |= TQENT_FLAG_CANCEL; TQSTAT_INC(tq, tasks_cancelled); @@ -760,6 +761,7 @@ taskq_dispatch_delay(taskq_t *tq, task_func_t func, void *arg, list_add_tail(&t->tqent_list, &tq->tq_delay_list); TQENT_SET_LIST(t, TQENT_LIST_DELAY); TQSTAT_INC_LIST(tq, t); + TQSTAT_INC(tq, tasks_total); t->tqent_id = rc = tq->tq_next_id; tq->tq_next_id++;