On Wed 22-07-20 15:58:42, Amir Goldstein wrote: > Since commit ecf13b5f8fd6 ("fsnotify: send event with parent/name info > to sb/mount/non-dir marks") the flag FS_EVENT_ON_CHILD has a meaning in > mask of a mark on a non-dir inode. It means that group is interested > in the name of the file with events. > > Since inotify is only intereseted in names of children of a watching > parent, do not sete FS_EVENT_ON_CHILD flag for marks on non-dir. > > Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx> I've placed this commit in the series before "fsnotify: send event with parent/name info to sb/mount/non-dir marks" and updated changelog accordingly. Honza > --- > fs/notify/inotify/inotify_user.c | 14 ++++++++------ > 1 file changed, 8 insertions(+), 6 deletions(-) > > diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c > index 5385d5817dd9..186722ba3894 100644 > --- a/fs/notify/inotify/inotify_user.c > +++ b/fs/notify/inotify/inotify_user.c > @@ -75,15 +75,17 @@ struct ctl_table inotify_table[] = { > }; > #endif /* CONFIG_SYSCTL */ > > -static inline __u32 inotify_arg_to_mask(u32 arg) > +static inline __u32 inotify_arg_to_mask(struct inode *inode, u32 arg) > { > __u32 mask; > > /* > - * everything should accept their own ignored, cares about children, > - * and should receive events when the inode is unmounted > + * Everything should accept their own ignored and should receive events > + * when the inode is unmounted. All directories care about children. > */ > - mask = (FS_IN_IGNORED | FS_EVENT_ON_CHILD | FS_UNMOUNT); > + mask = (FS_IN_IGNORED | FS_UNMOUNT); > + if (S_ISDIR(inode->i_mode)) > + mask |= FS_EVENT_ON_CHILD; > > /* mask off the flags used to open the fd */ > mask |= (arg & (IN_ALL_EVENTS | IN_ONESHOT | IN_EXCL_UNLINK)); > @@ -512,7 +514,7 @@ static int inotify_update_existing_watch(struct fsnotify_group *group, > int create = (arg & IN_MASK_CREATE); > int ret; > > - mask = inotify_arg_to_mask(arg); > + mask = inotify_arg_to_mask(inode, arg); > > fsn_mark = fsnotify_find_mark(&inode->i_fsnotify_marks, group); > if (!fsn_mark) > @@ -565,7 +567,7 @@ static int inotify_new_watch(struct fsnotify_group *group, > struct idr *idr = &group->inotify_data.idr; > spinlock_t *idr_lock = &group->inotify_data.idr_lock; > > - mask = inotify_arg_to_mask(arg); > + mask = inotify_arg_to_mask(inode, arg); > > tmp_i_mark = kmem_cache_alloc(inotify_inode_mark_cachep, GFP_KERNEL); > if (unlikely(!tmp_i_mark)) > -- > 2.17.1 > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR