diff options
Diffstat (limited to 'fs/notify/fsnotify.c')
-rw-r--r-- | fs/notify/fsnotify.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/notify/fsnotify.c b/fs/notify/fsnotify.c index 2172ba516c61..d2c34900ae05 100644 --- a/fs/notify/fsnotify.c +++ b/fs/notify/fsnotify.c | |||
@@ -167,9 +167,9 @@ int __fsnotify_parent(const struct path *path, struct dentry *dentry, __u32 mask | |||
167 | parent = dget_parent(dentry); | 167 | parent = dget_parent(dentry); |
168 | p_inode = parent->d_inode; | 168 | p_inode = parent->d_inode; |
169 | 169 | ||
170 | if (unlikely(!fsnotify_inode_watches_children(p_inode))) | 170 | if (unlikely(!fsnotify_inode_watches_children(p_inode))) { |
171 | __fsnotify_update_child_dentry_flags(p_inode); | 171 | __fsnotify_update_child_dentry_flags(p_inode); |
172 | else if (p_inode->i_fsnotify_mask & mask) { | 172 | } else if (p_inode->i_fsnotify_mask & mask & ALL_FSNOTIFY_EVENTS) { |
173 | struct name_snapshot name; | 173 | struct name_snapshot name; |
174 | 174 | ||
175 | /* we are notifying a parent so come up with the new mask which | 175 | /* we are notifying a parent so come up with the new mask which |
@@ -339,6 +339,9 @@ int fsnotify(struct inode *to_tell, __u32 mask, const void *data, int data_is, | |||
339 | sb = mnt->mnt.mnt_sb; | 339 | sb = mnt->mnt.mnt_sb; |
340 | mnt_or_sb_mask = mnt->mnt_fsnotify_mask | sb->s_fsnotify_mask; | 340 | mnt_or_sb_mask = mnt->mnt_fsnotify_mask | sb->s_fsnotify_mask; |
341 | } | 341 | } |
342 | /* An event "on child" is not intended for a mount/sb mark */ | ||
343 | if (mask & FS_EVENT_ON_CHILD) | ||
344 | mnt_or_sb_mask = 0; | ||
342 | 345 | ||
343 | /* | 346 | /* |
344 | * Optimization: srcu_read_lock() has a memory barrier which can | 347 | * Optimization: srcu_read_lock() has a memory barrier which can |