OpenCloudOS-Kernel/fs/notify
Amir Goldstein fc1b1e135c fsnotify: clear PARENT_WATCHED flags lazily
[ Upstream commit 172e422ffea20a89bfdc672741c1aad6fbb5044e ]

In some setups directories can have many (usually negative) dentries.
Hence __fsnotify_update_child_dentry_flags() function can take a
significant amount of time. Since the bulk of this function happens
under inode->i_lock this causes a significant contention on the lock
when we remove the watch from the directory as the
__fsnotify_update_child_dentry_flags() call from fsnotify_recalc_mask()
races with __fsnotify_update_child_dentry_flags() calls from
__fsnotify_parent() happening on children. This can lead upto softlockup
reports reported by users.

Fix the problem by calling fsnotify_update_children_dentry_flags() to
set PARENT_WATCHED flags only when parent starts watching children.

When parent stops watching children, clear false positive PARENT_WATCHED
flags lazily in __fsnotify_parent() for each accessed child.

Suggested-by: Jan Kara <jack@suse.cz>
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Stephen Brennan <stephen.s.brennan@oracle.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-09-08 07:54:44 +02:00
..
dnotify dnotify: Pass argument of fcntl_dirnotify as int 2023-07-10 14:36:12 +02:00
fanotify fanotify: limit reporting of event with non-decodeable file handles 2023-10-19 16:19:20 +02:00
inotify inotify: Avoid reporting event with invalid wd 2023-04-25 12:36:55 +02:00
Kconfig fs/notify: Remove "select SRCU" 2023-02-02 16:26:06 -08:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
fdinfo.c exportfs: add explicit flag to request non-decodeable file handles 2023-05-22 18:08:37 +02:00
fdinfo.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
fsnotify.c fsnotify: clear PARENT_WATCHED flags lazily 2024-09-08 07:54:44 +02:00
fsnotify.h fsnotify: clear PARENT_WATCHED flags lazily 2024-09-08 07:54:44 +02:00
group.c fsnotify: create helpers for group mark_mutex lock 2022-04-25 14:37:22 +02:00
mark.c fsnotify: clear PARENT_WATCHED flags lazily 2024-09-08 07:54:44 +02:00
notification.c fsnotify: Pass group argument to free_event 2021-10-27 12:34:18 +02:00