|
@@ -167,9 +167,9 @@ int __fsnotify_parent(const struct path *path, struct dentry *dentry, __u32 mask
|
|
|
parent = dget_parent(dentry);
|
|
|
p_inode = parent->d_inode;
|
|
|
|
|
|
- if (unlikely(!fsnotify_inode_watches_children(p_inode)))
|
|
|
+ if (unlikely(!fsnotify_inode_watches_children(p_inode))) {
|
|
|
__fsnotify_update_child_dentry_flags(p_inode);
|
|
|
- else if (p_inode->i_fsnotify_mask & mask) {
|
|
|
+ } else if (p_inode->i_fsnotify_mask & mask & ALL_FSNOTIFY_EVENTS) {
|
|
|
struct name_snapshot name;
|
|
|
|
|
|
/* 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,
|
|
|
sb = mnt->mnt.mnt_sb;
|
|
|
mnt_or_sb_mask = mnt->mnt_fsnotify_mask | sb->s_fsnotify_mask;
|
|
|
}
|
|
|
+ /* An event "on child" is not intended for a mount/sb mark */
|
|
|
+ if (mask & FS_EVENT_ON_CHILD)
|
|
|
+ mnt_or_sb_mask = 0;
|
|
|
|
|
|
/*
|
|
|
* Optimization: srcu_read_lock() has a memory barrier which can
|