From: Willy Tarreau Date: Thu, 25 Feb 2021 06:14:58 +0000 (+0100) Subject: MINOR: task: do not use __task_unlink_rq() from process_runnable_tasks() X-Git-Tag: v2.4-dev10~44 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2b363ac092102509a297dfe9e5606a63a76d2cc8;p=thirdparty%2Fhaproxy.git MINOR: task: do not use __task_unlink_rq() from process_runnable_tasks() As indicated in previous commit, this function tries to guess which tree the task is in to figure what counters to update, while we already have that info in the caller. Let's just pick the relevant parts to place them in the caller. --- diff --git a/src/task.c b/src/task.c index dd3080f0db..df6fbd5c0f 100644 --- a/src/task.c +++ b/src/task.c @@ -701,14 +701,18 @@ void process_runnable_tasks() if (likely(!grq || (lrq && (int)(lrq->key - grq->key) <= 0))) { t = eb32sc_entry(lrq, struct task, rq); lrq = eb32sc_next(lrq, tid_bit); - __task_unlink_rq(t); + _HA_ATOMIC_SUB(&sched->rq_total, 1); + eb32sc_delete(&t->rq); lpicked++; } #ifdef USE_THREAD else { t = eb32sc_entry(grq, struct task, rq); grq = eb32sc_next(grq, tid_bit); - __task_unlink_rq(t); + grq_total--; + _HA_ATOMIC_AND(&t->state, ~TASK_GLOBAL); + eb32sc_delete(&t->rq); + if (unlikely(!grq)) { grq = eb32sc_first(&rqueue, tid_bit); if (!grq) { @@ -719,6 +723,8 @@ void process_runnable_tasks() gpicked++; } #endif + if (t->nice) + _HA_ATOMIC_SUB(&niced_tasks, 1); /* Add it to the local task list */ LIST_ADDQ(&tt->tasklets[TL_NORMAL], &((struct tasklet *)t)->list);