From: Lai Jiangshan <jiangshanlai@gmail.com>
To: linux-kernel@vger.kernel.org
Cc: Tejun Heo <tj@kernel.org>, ying chen <yc1082463@gmail.com>,
Lai Jiangshan <jiangshan.ljs@antgroup.com>,
Lai Jiangshan <jiangshanlai@gmail.com>
Subject: [PATCH V3 4/7] workqueue: Loop over in rescuer until all its work is done
Date: Fri, 21 Nov 2025 22:57:17 +0800 [thread overview]
Message-ID: <20251121145720.342467-5-jiangshanlai@gmail.com> (raw)
In-Reply-To: <20251121145720.342467-1-jiangshanlai@gmail.com>
From: Lai Jiangshan <jiangshan.ljs@antgroup.com>
Simplify the rescuer work by looping directly in the rescuer rather than
adding the pwq back to the maydays list. This also helps when
max_requests is 1 or small but pwq->inactive_works has a large number of
pending work items.
This might hurt fairness among PWQs and the rescuer could end up being
stuck on one PWQ indefinitely, but the rescuer's objective is to make
forward progress rather than ensure fairness.
Fairness can be further improved in future by assigning work items to
the rescuer one by one.
Signed-off-by: Lai Jiangshan <jiangshan.ljs@antgroup.com>
---
kernel/workqueue.c | 24 +-----------------------
1 file changed, 1 insertion(+), 23 deletions(-)
diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index 943fa27e272b..3032235a131e 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -3526,31 +3526,9 @@ static int rescuer_thread(void *__rescuer)
WARN_ON_ONCE(!list_empty(&rescuer->scheduled));
- if (assign_rescuer_work(pwq, rescuer)) {
+ while (assign_rescuer_work(pwq, rescuer))
process_scheduled_works(rescuer);
- /*
- * The above execution of rescued work items could
- * have created more to rescue through
- * pwq_activate_first_inactive() or chained
- * queueing. Let's put @pwq back on mayday list so
- * that such back-to-back work items, which may be
- * being used to relieve memory pressure, don't
- * incur MAYDAY_INTERVAL delay inbetween.
- */
- if (pwq->nr_active && need_to_create_worker(pool)) {
- raw_spin_lock(&wq_mayday_lock);
- /*
- * Queue iff somebody else hasn't queued it already.
- */
- if (list_empty(&pwq->mayday_node)) {
- get_pwq(pwq);
- list_add_tail(&pwq->mayday_node, &wq->maydays);
- }
- raw_spin_unlock(&wq_mayday_lock);
- }
- }
-
/*
* Leave this pool. Notify regular workers; otherwise, we end up
* with 0 concurrency and stalling the execution.
--
2.19.1.6.gb485710b
next prev parent reply other threads:[~2025-11-21 14:53 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-21 14:57 [PATCH V3 0/7] workqueue: Factor the way to assign rescuer work Lai Jiangshan
2025-11-21 14:57 ` [PATCH V3 1/7] workqueue: Factor out assign_rescuer_work() Lai Jiangshan
2025-11-21 14:57 ` [PATCH V3 2/7] workqueue: Only assign rescuer work when really needed Lai Jiangshan
2025-11-21 14:57 ` [PATCH V3 3/7] workqueue: Don't rely on wq->rescuer to stop rescuer Lai Jiangshan
2025-11-21 14:57 ` Lai Jiangshan [this message]
2025-11-21 19:30 ` [PATCH V3 4/7] workqueue: Loop over in rescuer until all its work is done Tejun Heo
2025-11-21 14:57 ` [PATCH V3 5/7] workqueue: Process rescuer work items one-by-one using a cursor Lai Jiangshan
2025-11-21 19:05 ` Tejun Heo
2025-11-21 14:57 ` [PATCH V3 6/7] workqueue: Limit number of processed works in rescuer per turn Lai Jiangshan
2025-11-21 19:28 ` Tejun Heo
2025-11-22 6:22 ` Lai Jiangshan
2025-11-22 14:26 ` Tejun Heo
2025-11-21 14:57 ` [PATCH V3 7/7] workqueue: Process extra works in rescuer when there are no more to rescue Lai Jiangshan
2025-11-21 19:29 ` Tejun Heo
2025-11-22 7:07 ` Lai Jiangshan
2025-11-22 14:31 ` Tejun Heo
2025-11-21 19:57 ` [PATCH V3 0/7] workqueue: Factor the way to assign rescuer work Tejun Heo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251121145720.342467-5-jiangshanlai@gmail.com \
--to=jiangshanlai@gmail.com \
--cc=jiangshan.ljs@antgroup.com \
--cc=linux-kernel@vger.kernel.org \
--cc=tj@kernel.org \
--cc=yc1082463@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox