Skip to content

Commit

Permalink
Merge tag 'fsnotify_for_v4.20-rc3' of git://git.kernel.org/pub/scm/li…
Browse files Browse the repository at this point in the history
…nux/kernel/git/jack/linux-fs

Pull fsnotify fix from Jan Kara:
 "One small fsnotify fix for duplicate events"

* tag 'fsnotify_for_v4.20-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs:
  fanotify: fix handling of events on child sub-directory
  • Loading branch information
torvalds committed Nov 16, 2018
2 parents e6a2562 + b469e7e commit 1ce80e0
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 7 deletions.
10 changes: 5 additions & 5 deletions fs/notify/fanotify/fanotify.c
Original file line number Diff line number Diff line change
Expand Up @@ -115,12 +115,12 @@ static bool fanotify_should_send_event(struct fsnotify_iter_info *iter_info,
continue;
mark = iter_info->marks[type];
/*
* if the event is for a child and this inode doesn't care about
* events on the child, don't send it!
* If the event is for a child and this mark doesn't care about
* events on a child, don't send it!
*/
if (type == FSNOTIFY_OBJ_TYPE_INODE &&
(event_mask & FS_EVENT_ON_CHILD) &&
!(mark->mask & FS_EVENT_ON_CHILD))
if (event_mask & FS_EVENT_ON_CHILD &&
(type != FSNOTIFY_OBJ_TYPE_INODE ||
!(mark->mask & FS_EVENT_ON_CHILD)))
continue;

marks_mask |= mark->mask;
Expand Down
7 changes: 5 additions & 2 deletions fs/notify/fsnotify.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 1ce80e0

Please sign in to comment.