]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
writeback: Avoid contention on wb->list_lock when switching inodes
authorJan Kara <jack@suse.cz>
Wed, 9 Apr 2025 15:12:59 +0000 (17:12 +0200)
committerChristian Brauner <brauner@kernel.org>
Fri, 19 Sep 2025 11:11:00 +0000 (13:11 +0200)
commite1b849cfa6b61f1c866a908c9e8dd9b5aaab820b
treec4ec0f4d3e0ecfc88637d1ddb9fd5d4021890735
parent8f5ae30d69d7543eee0d70083daf4de8fe15d585
writeback: Avoid contention on wb->list_lock when switching inodes

There can be multiple inode switch works that are trying to switch
inodes to / from the same wb. This can happen in particular if some
cgroup exits which owns many (thousands) inodes and we need to switch
them all. In this case several inode_switch_wbs_work_fn() instances will
be just spinning on the same wb->list_lock while only one of them makes
forward progress. This wastes CPU cycles and quickly leads to softlockup
reports and unusable system.

Instead of running several inode_switch_wbs_work_fn() instances in
parallel switching to the same wb and contending on wb->list_lock, run
just one work item per wb and manage a queue of isw items switching to
this wb.

Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jan Kara <jack@suse.cz>
fs/fs-writeback.c
include/linux/backing-dev-defs.h
include/linux/writeback.h
mm/backing-dev.c