]> www.infradead.org Git - users/jedix/linux-maple.git/commit
fsnotify: clear PARENT_WATCHED flags lazily
authorAmir Goldstein <amir73il@gmail.com>
Sun, 12 May 2024 11:30:07 +0000 (13:30 +0200)
committerJan Kara <jack@suse.cz>
Wed, 5 Jun 2024 07:52:38 +0000 (09:52 +0200)
commit172e422ffea20a89bfdc672741c1aad6fbb5044e
tree2ac8a1902891722aa44047a41848c446fd35c34a
parent32f88d65f01bf6f45476d7edbe675e44fb9e1d58
fsnotify: clear PARENT_WATCHED flags lazily

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>
fs/notify/fsnotify.c
fs/notify/fsnotify.h
fs/notify/mark.c
include/linux/fsnotify_backend.h