fsnotify: send fsnotify_mark to groups in event handling functions

With the change of fsnotify to use srcu walking the marks list instead of
walking the global groups list we now know the mark in question.  The code can
send the mark to the group's handling functions and the groups won't have to
find those marks themselves.

Signed-off-by: Eric Paris <eparis@redhat.com>
This commit is contained in:
Eric Paris
2010-07-28 10:18:38 -04:00
parent 8778abb9a8
commit 3a9b16b407
7 changed files with 37 additions and 25 deletions

View File

@@ -171,15 +171,16 @@ void __fsnotify_flush_ignored_mask(struct inode *inode, void *data, int data_is)
}
static int send_to_group(struct fsnotify_group *group, struct inode *to_tell,
struct vfsmount *mnt, __u32 mask, void *data,
int data_is, u32 cookie, const unsigned char *file_name,
struct vfsmount *mnt, struct fsnotify_mark *mark,
__u32 mask, void *data, int data_is, u32 cookie,
const unsigned char *file_name,
struct fsnotify_event **event)
{
pr_debug("%s: group=%p to_tell=%p mnt=%p mask=%x data=%p data_is=%d"
" cookie=%d event=%p\n", __func__, group, to_tell, mnt,
mask, data, data_is, cookie, *event);
pr_debug("%s: group=%p to_tell=%p mnt=%p mark=%p mask=%x data=%p"
" data_is=%d cookie=%d event=%p\n", __func__, group, to_tell,
mnt, mark, mask, data, data_is, cookie, *event);
if (!group->ops->should_send_event(group, to_tell, mnt, mask,
if (!group->ops->should_send_event(group, to_tell, mnt, mark, mask,
data, data_is))
return 0;
if (!*event) {
@@ -189,7 +190,7 @@ static int send_to_group(struct fsnotify_group *group, struct inode *to_tell,
if (!*event)
return -ENOMEM;
}
return group->ops->handle_event(group, *event);
return group->ops->handle_event(group, mark, *event);
}
static bool needed_by_vfsmount(__u32 test_mask, struct vfsmount *mnt)
@@ -252,7 +253,7 @@ int fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is,
group = mark->group;
if (!group)
continue;
ret = send_to_group(group, to_tell, NULL, mask,
ret = send_to_group(group, to_tell, NULL, mark, mask,
data, data_is, cookie, file_name,
&event);
if (ret)
@@ -271,7 +272,7 @@ int fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is,
group = mark->group;
if (!group)
continue;
ret = send_to_group(group, to_tell, mnt, mask,
ret = send_to_group(group, to_tell, mnt, mark, mask,
data, data_is, cookie, file_name,
&event);
if (ret)