On Fri, Jun 17, 2016 at 05:51:17PM -0400, Tejun Heo wrote: > kernfs_notify_workfn() sends out file modified events for the > scheduled kernfs_nodes. Because the modifications aren't from > userland, it doesn't have the matching file struct at hand and can't > use fsnotify_modify(). Instead, it looked up the inode and then used > d_find_any_alias() to find the dentry and used fsnotify_parent() and > fsnotify() directly to generate notifications. > > The assumption was that the relevant dentries would have been pinned > if there are listeners, which isn't true as inotify doesn't pin > dentries at all and watching the parent doesn't pin the child dentries > even for dnotify. This led to, for example, inotify watchers not > getting notifications if the system is under memory pressure and the > matching dentries got reclaimed. It can also be triggered through > /proc/sys/vm/drop_caches or a remount attempt which involves shrinking > dcache. > > fsnotify_parent() only uses the dentry to access the parent inode, > which kernfs can do easily. Update kernfs_notify_workfn() so that it > uses fsnotify() directly for both the parent and target inodes without > going through d_find_any_alias(). While at it, supply the target file > name to fsnotify() from kernfs_node->name. > > Signed-off-by: Tejun Heo <t...@kernel.org> > Reported-by: Evgeny Vereshchagin <evv...@ya.ru> > Fixes: d911d9874801 ("kernfs: make kernfs_notify() trigger inotify events > too") > Cc: John McCutchan <j...@johnmccutchan.com> > Cc: Robert Love <rl...@rlove.org> > Cc: Eric Paris <epa...@parisplace.org> > Cc: sta...@vger.kernel.org # v3.16+ > --- > Hello, > > I'm not sure this is the best way to deal with this but it at least > works fine. If there's a better, please let me know. If this > approach is okay, in the future, maybe we want to implement a helper > on fsnotify side to handle notification generation from back-end side?
Greg, can you please pick this one up? Thanks. -- tejun