Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 207723
b: refs/heads/master
c: 7f6b611
h: refs/heads/master
i:
  207721: f195334
  207719: e205545
v: v3
  • Loading branch information
Eric Paris committed Jul 28, 2010
1 parent adc429f commit 7e297af
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 25 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3a9b16b407f10b2a771bcae13fb5791e527d6bcf
refs/heads/master: 7f6b6117e1803777fcf48fe31bd236a7fbf740db
29 changes: 5 additions & 24 deletions trunk/fs/notify/inotify/inotify_fsnotify.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,6 @@ static int inotify_handle_event(struct fsnotify_group *group,
struct fsnotify_mark *mark,
struct fsnotify_event *event)
{
struct fsnotify_mark *fsn_mark;
struct inotify_inode_mark *i_mark;
struct inode *to_tell;
struct inotify_event_private_data *event_priv;
Expand All @@ -106,11 +105,7 @@ static int inotify_handle_event(struct fsnotify_group *group,

to_tell = event->to_tell;

fsn_mark = fsnotify_find_inode_mark(group, to_tell);
/* race with watch removal? We already passes should_send */
if (unlikely(!fsn_mark))
return 0;
i_mark = container_of(fsn_mark, struct inotify_inode_mark,
i_mark = container_of(mark, struct inotify_inode_mark,
fsn_mark);
wd = i_mark->wd;

Expand All @@ -132,14 +127,8 @@ static int inotify_handle_event(struct fsnotify_group *group,
ret = PTR_ERR(added_event);
}

if (fsn_mark->mask & IN_ONESHOT)
fsnotify_destroy_mark(fsn_mark);

/*
* If we hold the fsn_mark until after the event is on the queue
* IN_IGNORED won't be able to pass this event in the queue
*/
fsnotify_put_mark(fsn_mark);
if (mark->mask & IN_ONESHOT)
fsnotify_destroy_mark(mark);

return ret;
}
Expand All @@ -153,30 +142,22 @@ static bool inotify_should_send_event(struct fsnotify_group *group, struct inode
struct vfsmount *mnt, struct fsnotify_mark *mark,
__u32 mask, void *data, int data_type)
{
struct fsnotify_mark *fsn_mark;
bool send;

pr_debug("%s: group=%p inode=%p mask=%x data=%p data_type=%d\n",
__func__, group, inode, mask, data, data_type);

fsn_mark = fsnotify_find_inode_mark(group, inode);
if (!fsn_mark)
return false;

mask = (mask & ~FS_EVENT_ON_CHILD);
send = (fsn_mark->mask & mask);
send = (mark->mask & mask);

if (send && (fsn_mark->mask & FS_EXCL_UNLINK) &&
if (send && (mark->mask & FS_EXCL_UNLINK) &&
(data_type == FSNOTIFY_EVENT_FILE)) {
struct file *file = data;

if (d_unlinked(file->f_path.dentry))
send = false;
}

/* find took a reference */
fsnotify_put_mark(fsn_mark);

return send;
}

Expand Down

0 comments on commit 7e297af

Please sign in to comment.