]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
fs: WQ_PERCPU added to alloc_workqueue users
authorMarco Crivellari <marco.crivellari@suse.com>
Tue, 16 Sep 2025 08:29:06 +0000 (10:29 +0200)
committerChristian Brauner <brauner@kernel.org>
Fri, 19 Sep 2025 14:15:07 +0000 (16:15 +0200)
commit69635d7f4b344e6f5344bba3c3de92e4fb8b0d2a
treea71e029d3da0a0ffac7b73031a508f810b37c59d
parent4ef64db060619be040351e3960e151e5fef3f895
fs: WQ_PERCPU added to alloc_workqueue users

Currently if a user enqueue a work item using schedule_delayed_work() the
used wq is "system_wq" (per-cpu wq) while queue_delayed_work() use
WORK_CPU_UNBOUND (used when a cpu is not specified). The same applies to
schedule_work() that is using system_wq and queue_work(), that makes use
again of WORK_CPU_UNBOUND.
This lack of consistentcy cannot be addressed without refactoring the API.

alloc_workqueue() treats all queues as per-CPU by default, while unbound
workqueues must opt-in via WQ_UNBOUND.

This default is suboptimal: most workloads benefit from unbound queues,
allowing the scheduler to place worker threads where they’re needed and
reducing noise when CPUs are isolated.

This patch adds a new WQ_PERCPU flag to all the fs subsystem users to
explicitly request the use of the per-CPU behavior. Both flags coexist
for one release cycle to allow callers to transition their calls.

Once migration is complete, WQ_UNBOUND can be removed and unbound will
become the implicit default.

With the introduction of the WQ_PERCPU flag (equivalent to !WQ_UNBOUND),
any alloc_workqueue() caller that doesn’t explicitly specify WQ_UNBOUND
must now use WQ_PERCPU.

All existing users have been updated accordingly.

Suggested-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Marco Crivellari <marco.crivellari@suse.com>
Link: https://lore.kernel.org/20250916082906.77439-4-marco.crivellari@suse.com
Signed-off-by: Christian Brauner <brauner@kernel.org>
19 files changed:
fs/afs/main.c
fs/bcachefs/super.c
fs/btrfs/disk-io.c
fs/ceph/super.c
fs/dlm/lowcomms.c
fs/dlm/main.c
fs/fs-writeback.c
fs/gfs2/main.c
fs/gfs2/ops_fstype.c
fs/ocfs2/dlm/dlmdomain.c
fs/ocfs2/dlmfs/dlmfs.c
fs/smb/client/cifsfs.c
fs/smb/server/ksmbd_work.c
fs/smb/server/transport_rdma.c
fs/super.c
fs/verity/verify.c
fs/xfs/xfs_log.c
fs/xfs/xfs_mru_cache.c
fs/xfs/xfs_super.c