Commit 7f6b6117 authored by Eric Paris's avatar Eric Paris

inotify: use the mark in handler functions

inotify now gets a mark in the should_send_event and handle_event
functions.  Rather than look up the mark themselves inotify should just use
the mark it was handed.
Signed-off-by: default avatarEric Paris <eparis@redhat.com>
parent 3a9b16b4
...@@ -93,7 +93,6 @@ static int inotify_handle_event(struct fsnotify_group *group, ...@@ -93,7 +93,6 @@ static int inotify_handle_event(struct fsnotify_group *group,
struct fsnotify_mark *mark, struct fsnotify_mark *mark,
struct fsnotify_event *event) struct fsnotify_event *event)
{ {
struct fsnotify_mark *fsn_mark;
struct inotify_inode_mark *i_mark; struct inotify_inode_mark *i_mark;
struct inode *to_tell; struct inode *to_tell;
struct inotify_event_private_data *event_priv; struct inotify_event_private_data *event_priv;
...@@ -106,11 +105,7 @@ static int inotify_handle_event(struct fsnotify_group *group, ...@@ -106,11 +105,7 @@ static int inotify_handle_event(struct fsnotify_group *group,
to_tell = event->to_tell; to_tell = event->to_tell;
fsn_mark = fsnotify_find_inode_mark(group, to_tell); i_mark = container_of(mark, struct inotify_inode_mark,
/* 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,
fsn_mark); fsn_mark);
wd = i_mark->wd; wd = i_mark->wd;
...@@ -132,14 +127,8 @@ static int inotify_handle_event(struct fsnotify_group *group, ...@@ -132,14 +127,8 @@ static int inotify_handle_event(struct fsnotify_group *group,
ret = PTR_ERR(added_event); ret = PTR_ERR(added_event);
} }
if (fsn_mark->mask & IN_ONESHOT) if (mark->mask & IN_ONESHOT)
fsnotify_destroy_mark(fsn_mark); fsnotify_destroy_mark(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);
return ret; return ret;
} }
...@@ -153,20 +142,15 @@ static bool inotify_should_send_event(struct fsnotify_group *group, struct inode ...@@ -153,20 +142,15 @@ static bool inotify_should_send_event(struct fsnotify_group *group, struct inode
struct vfsmount *mnt, struct fsnotify_mark *mark, struct vfsmount *mnt, struct fsnotify_mark *mark,
__u32 mask, void *data, int data_type) __u32 mask, void *data, int data_type)
{ {
struct fsnotify_mark *fsn_mark;
bool send; bool send;
pr_debug("%s: group=%p inode=%p mask=%x data=%p data_type=%d\n", pr_debug("%s: group=%p inode=%p mask=%x data=%p data_type=%d\n",
__func__, group, inode, mask, data, data_type); __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); 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)) { (data_type == FSNOTIFY_EVENT_FILE)) {
struct file *file = data; struct file *file = data;
...@@ -174,9 +158,6 @@ static bool inotify_should_send_event(struct fsnotify_group *group, struct inode ...@@ -174,9 +158,6 @@ static bool inotify_should_send_event(struct fsnotify_group *group, struct inode
send = false; send = false;
} }
/* find took a reference */
fsnotify_put_mark(fsn_mark);
return send; return send;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment