summaryrefslogtreecommitdiff
path: root/include/net
diff options
context:
space:
mode:
authorAmir Goldstein <amir73il@gmail.com>2024-05-12 13:30:07 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2024-09-08 07:54:44 +0200
commitfc1b1e135c3f72382f792e6c319fc088d5523ad5 (patch)
tree408435f790c9e00cf369ef512f739007d81881ca /include/net
parent3b9f2d9301ae67070fe77a0c06758722fd7172b7 (diff)
downloadlinux-fc1b1e135c3f72382f792e6c319fc088d5523ad5.tar.gz
linux-fc1b1e135c3f72382f792e6c319fc088d5523ad5.tar.bz2
linux-fc1b1e135c3f72382f792e6c319fc088d5523ad5.zip
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>
Diffstat (limited to 'include/net')
0 files changed, 0 insertions, 0 deletions