]> git.ipfire.org Git - people/ms/linux.git/commit - fs/kernfs/dir.c
kernfs: switch global kernfs_rwsem lock to per-fs lock
authorMinchan Kim <minchan@kernel.org>
Thu, 18 Nov 2021 23:00:08 +0000 (15:00 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 24 Nov 2021 12:55:16 +0000 (13:55 +0100)
commit393c3714081a53795bbff0e985d24146def6f57f
tree188134895692753a0862a1cbd9a8466d56a4245b
parent136057256686de39cc3a07c2e39ef6bc43003ff6
kernfs: switch global kernfs_rwsem lock to per-fs lock

The kernfs implementation has big lock granularity(kernfs_rwsem) so
every kernfs-based(e.g., sysfs, cgroup) fs are able to compete the
lock. It makes trouble for some cases to wait the global lock
for a long time even though they are totally independent contexts
each other.

A general example is process A goes under direct reclaim with holding
the lock when it accessed the file in sysfs and process B is waiting
the lock with exclusive mode and then process C is waiting the lock
until process B could finish the job after it gets the lock from
process A.

This patch switches the global kernfs_rwsem to per-fs lock, which
put the rwsem into kernfs_root.

Suggested-by: Tejun Heo <tj@kernel.org>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Minchan Kim <minchan@kernel.org>
Link: https://lore.kernel.org/r/20211118230008.2679780-1-minchan@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/kernfs/dir.c
fs/kernfs/file.c
fs/kernfs/inode.c
fs/kernfs/mount.c
fs/kernfs/symlink.c
include/linux/kernfs.h