]> git.karo-electronics.de Git - linux-beck.git/commitdiff
fsnotify: provide the data type to should_send_event
authorEric Paris <eparis@redhat.com>
Fri, 18 Dec 2009 02:24:21 +0000 (21:24 -0500)
committerEric Paris <eparis@redhat.com>
Wed, 28 Jul 2010 13:58:31 +0000 (09:58 -0400)
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>
fs/notify/dnotify/dnotify.c
fs/notify/fsnotify.c
fs/notify/inotify/inotify_fsnotify.c
include/linux/fsnotify_backend.h
kernel/audit_tree.c
kernel/audit_watch.c

index 85b97fca14de31e45068d6c4a09a72866212085e..6f30f496e23529bd727fa08a4a5c54423c501282 100644 (file)
@@ -133,7 +133,8 @@ static int dnotify_handle_event(struct fsnotify_group *group,
  * userspace notification for that pair.
  */
 static bool dnotify_should_send_event(struct fsnotify_group *group,
-                                     struct inode *inode, __u32 mask)
+                                     struct inode *inode, __u32 mask,
+                                     int data_type)
 {
        struct fsnotify_mark_entry *entry;
        bool send;
index fcc2f064af8305b49c2387196bdb24bcc2f15d1e..fc06e478939285af48cf9a15a87fb779217d14db 100644 (file)
@@ -157,7 +157,7 @@ void fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is, const
        idx = srcu_read_lock(&fsnotify_grp_srcu);
        list_for_each_entry_rcu(group, &fsnotify_groups, group_list) {
                if (test_mask & group->mask) {
-                       if (!group->ops->should_send_event(group, to_tell, mask))
+                       if (!group->ops->should_send_event(group, to_tell, mask, data_is))
                                continue;
                        if (!event) {
                                event = fsnotify_create_event(to_tell, mask, data,
index e27960cd76ab9046257826783d907bdb6f3ca2a8..fc7c4952e6a2110c989cb0583124a0ddfebb0c54 100644 (file)
@@ -86,7 +86,8 @@ static void inotify_freeing_mark(struct fsnotify_mark_entry *entry, struct fsnot
        inotify_ignored_and_remove_idr(entry, group);
 }
 
-static bool inotify_should_send_event(struct fsnotify_group *group, struct inode *inode, __u32 mask)
+static bool inotify_should_send_event(struct fsnotify_group *group, struct inode *inode,
+                                     __u32 mask, int data_type)
 {
        struct fsnotify_mark_entry *entry;
        bool send;
index e2528437102086079d741f546a08d2b83230b5f5..61aed0c54fe9edde82a0ee049f9e45da904460fc 100644 (file)
@@ -84,7 +84,8 @@ struct fsnotify_event_private_data;
  *             valid group and inode to use to clean up.
  */
 struct fsnotify_ops {
-       bool (*should_send_event)(struct fsnotify_group *group, struct inode *inode, __u32 mask);
+       bool (*should_send_event)(struct fsnotify_group *group, struct inode *inode,
+                                 __u32 mask, int data_type);
        int (*handle_event)(struct fsnotify_group *group, struct fsnotify_event *event);
        void (*free_group_priv)(struct fsnotify_group *group);
        void (*freeing_mark)(struct fsnotify_mark_entry *entry, struct fsnotify_group *group);
index a164600dd82ef1ac67e3435da615a7e426ed0cbe..b5417cd65216ebdb13b5f31d5a56bb7571785ee4 100644 (file)
@@ -919,7 +919,8 @@ static void audit_tree_freeing_mark(struct fsnotify_mark_entry *entry, struct fs
        fsnotify_put_mark(entry);
 }
 
-static bool audit_tree_send_event(struct fsnotify_group *group, struct inode *inode, __u32 mask)
+static bool audit_tree_send_event(struct fsnotify_group *group, struct inode *inode,
+                                 __u32 mask, int data_type)
 {
        return 0;
 }
index f8543a41115b909d032e604c004528a84de78e76..67d8f2f52874c215c6be318cef3676e15d7eb2ed 100644 (file)
@@ -505,7 +505,8 @@ void audit_remove_watch_rule(struct audit_krule *krule)
        }
 }
 
-static bool audit_watch_should_send_event(struct fsnotify_group *group, struct inode *inode, __u32 mask)
+static bool audit_watch_should_send_event(struct fsnotify_group *group, struct inode *inode,
+                                         __u32 mask, int data_type)
 {
        struct fsnotify_mark_entry *entry;
        bool send;