[PATCH v2 0/5] fs: Move long delayed work on system_dfl_long_wq
From: Marco Crivellari
Date: Mon Jul 06 2026 - 06:54:57 EST
Hello,
Currently the code uses the per-cpu workqueue system_long_wq to schedule
long running works.
Unbound works could benefit from scheduler task placement, to optimize
performance and power consumption. Another good reason to have this unbound,
is the "queue_delayed_work()" function, used to enqueue the work item.
More details on this will follow in the next section.
Recently, a new unbound workqueue specific for long running work has been
added:
c116737e972e ("workqueue: Add system_dfl_long_wq for long unbound works")
~~~ Details about queue_delayed_work ~~~
system_long_wq is a per-cpu workqueue and it is used as a parameter of
queue_delayed_work(). This function schedule an item that it will later
be enqueued (once the timer will fire). __queue_delayed_work() does the job
receiving as "cpu" WORK_CPU_UNBOUND:
if (housekeeping_enabled(HK_TYPE_TIMER)) {
// [....]
} else {
if (likely(cpu == WORK_CPU_UNBOUND))
add_timer_global(timer);
else
add_timer_on(timer, cpu);
}
The timer is global, so can fire everywhere, and the work item will be
enqueued where the timer fired.
Since the workqueue work doesn't rely on per-cpu variables, there is no
obvious reason that justify the use of a per-cpu workqueue. So change the
workqueue with the new system_dfl_long_wq, so that the used workqueue is
now unbound and can benefit from scheduler task placement.
Thanks!
---
Changes in v2:
- rebased on v7.2-rc2, keeping reviewed-by and acked-by in P 3-4-6
- dropped 5/6, "fuse: dax: Move long delayed work on system_dfl_long_wq",
because it has been applied.
Marco Crivellari (5):
ufs: Move long delayed work on system_dfl_long_wq
fs/jffs2: Move long delayed work on system_dfl_long_wq
hfsplus: Move long delayed work on system_dfl_long_wq
hfs: Move long delayed work on system_dfl_long_wq
affs: Move long delayed work on system_dfl_long_wq
fs/affs/super.c | 2 +-
fs/hfs/super.c | 2 +-
fs/hfsplus/super.c | 2 +-
fs/jffs2/wbuf.c | 2 +-
fs/ufs/super.c | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
--
2.54.0