aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Paris <eparis@redhat.com>2009-12-17 21:24:21 -0500
committerEric Paris <eparis@redhat.com>2010-07-28 09:58:31 -0400
commit7b0a04fbfb35650941af87728d4891515b4fc179 (patch)
tree48d85a11a8d3c283db3eb9f91ac4fb97bb2beafe
parentd7f0ce4e436b6109527c51b0efe0deff53d215f7 (diff)
fsnotify: provide the data type to should_send_event
fanotify is only interested in event types which contain enough information to open the original file in the context of the fanotify listener. Since fanotify may not want to send events if that data isn't present we pass the data type to the should_send_event function call so fanotify can express its lack of interest. Signed-off-by: Eric Paris <eparis@redhat.com>
-rw-r--r--fs/notify/dnotify/dnotify.c3
-rw-r--r--fs/notify/fsnotify.c2
-rw-r--r--fs/notify/inotify/inotify_fsnotify.c3
-rw-r--r--include/linux/fsnotify_backend.h3
-rw-r--r--kernel/audit_tree.c3
-rw-r--r--kernel/audit_watch.c3
6 files changed, 11 insertions, 6 deletions
diff --git a/fs/notify/dnotify/dnotify.c b/fs/notify/dnotify/dnotify.c
index 85b97fca14de..6f30f496e235 100644
--- a/fs/notify/dnotify/dnotify.c
+++ b/fs/notify/dnotify/dnotify.c
@@ -133,7 +133,8 @@ static int dnotify_handle_event(struct fsnotify_group *group,
133 * userspace notification for that pair. 133 * userspace notification for that pair.
134 */ 134 */
135static bool dnotify_should_send_event(struct fsnotify_group *group, 135static bool dnotify_should_send_event(struct fsnotify_group *group,
136 struct inode *inode, __u32 mask) 136 struct inode *inode, __u32 mask,
137 int data_type)
137{ 138{
138 struct fsnotify_mark_entry *entry; 139 struct fsnotify_mark_entry *entry;
139 bool send; 140 bool send;
diff --git a/fs/notify/fsnotify.c b/fs/notify/fsnotify.c
index fcc2f064af83..fc06e4789392 100644
--- a/fs/notify/fsnotify.c
+++ b/fs/notify/fsnotify.c
@@ -157,7 +157,7 @@ void fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is, const
157 idx = srcu_read_lock(&fsnotify_grp_srcu); 157 idx = srcu_read_lock(&fsnotify_grp_srcu);
158 list_for_each_entry_rcu(group, &fsnotify_groups, group_list) { 158 list_for_each_entry_rcu(group, &fsnotify_groups, group_list) {
159 if (test_mask & group->mask) { 159 if (test_mask & group->mask) {
160 if (!group->ops->should_send_event(group, to_tell, mask)) 160 if (!group->ops->should_send_event(group, to_tell, mask, data_is))
161 continue; 161 continue;
162 if (!event) { 162 if (!event) {
163 event = fsnotify_create_event(to_tell, mask, data, 163 event = fsnotify_create_event(to_tell, mask, data,
diff --git a/fs/notify/inotify/inotify_fsnotify.c b/fs/notify/inotify/inotify_fsnotify.c
index e27960cd76ab..fc7c4952e6a2 100644
--- a/fs/notify/inotify/inotify_fsnotify.c
+++ b/fs/notify/inotify/inotify_fsnotify.c
@@ -86,7 +86,8 @@ static void inotify_freeing_mark(struct fsnotify_mark_entry *entry, struct fsnot
86 inotify_ignored_and_remove_idr(entry, group); 86 inotify_ignored_and_remove_idr(entry, group);
87} 87}
88 88
89static bool inotify_should_send_event(struct fsnotify_group *group, struct inode *inode, __u32 mask) 89static bool inotify_should_send_event(struct fsnotify_group *group, struct inode *inode,
90 __u32 mask, int data_type)
90{ 91{
91 struct fsnotify_mark_entry *entry; 92 struct fsnotify_mark_entry *entry;
92 bool send; 93 bool send;
diff --git a/include/linux/fsnotify_backend.h b/include/linux/fsnotify_backend.h
index e25284371020..61aed0c54fe9 100644
--- a/include/linux/fsnotify_backend.h
+++ b/include/linux/fsnotify_backend.h
@@ -84,7 +84,8 @@ struct fsnotify_event_private_data;
84 * valid group and inode to use to clean up. 84 * valid group and inode to use to clean up.
85 */ 85 */
86struct fsnotify_ops { 86struct fsnotify_ops {
87 bool (*should_send_event)(struct fsnotify_group *group, struct inode *inode, __u32 mask); 87 bool (*should_send_event)(struct fsnotify_group *group, struct inode *inode,
88 __u32 mask, int data_type);
88 int (*handle_event)(struct fsnotify_group *group, struct fsnotify_event *event); 89 int (*handle_event)(struct fsnotify_group *group, struct fsnotify_event *event);
89 void (*free_group_priv)(struct fsnotify_group *group); 90 void (*free_group_priv)(struct fsnotify_group *group);
90 void (*freeing_mark)(struct fsnotify_mark_entry *entry, struct fsnotify_group *group); 91 void (*freeing_mark)(struct fsnotify_mark_entry *entry, struct fsnotify_group *group);
diff --git a/kernel/audit_tree.c b/kernel/audit_tree.c
index a164600dd82e..b5417cd65216 100644
--- a/kernel/audit_tree.c
+++ b/kernel/audit_tree.c
@@ -919,7 +919,8 @@ static void audit_tree_freeing_mark(struct fsnotify_mark_entry *entry, struct fs
919 fsnotify_put_mark(entry); 919 fsnotify_put_mark(entry);
920} 920}
921 921
922static bool audit_tree_send_event(struct fsnotify_group *group, struct inode *inode, __u32 mask) 922static bool audit_tree_send_event(struct fsnotify_group *group, struct inode *inode,
923 __u32 mask, int data_type)
923{ 924{
924 return 0; 925 return 0;
925} 926}
diff --git a/kernel/audit_watch.c b/kernel/audit_watch.c
index f8543a41115b..67d8f2f52874 100644
--- a/kernel/audit_watch.c
+++ b/kernel/audit_watch.c
@@ -505,7 +505,8 @@ void audit_remove_watch_rule(struct audit_krule *krule)
505 } 505 }
506} 506}
507 507
508static bool audit_watch_should_send_event(struct fsnotify_group *group, struct inode *inode, __u32 mask) 508static bool audit_watch_should_send_event(struct fsnotify_group *group, struct inode *inode,
509 __u32 mask, int data_type)
509{ 510{
510 struct fsnotify_mark_entry *entry; 511 struct fsnotify_mark_entry *entry;
511 bool send; 512 bool send;