fsnotify: cleanup should_send_event
Eric Paris [Wed, 28 Jul 2010 14:18:39 +0000 (10:18 -0400)]
The change to use srcu and walk the object list rather than the global
fsnotify_group list means that should_send_event is no longer needed for a
number of groups and can be simplified for others.  Do that.

Signed-off-by: Eric Paris <eparis@redhat.com>

fs/notify/dnotify/dnotify.c
fs/notify/fanotify/fanotify.c
fs/notify/fsnotify.c
fs/notify/inotify/inotify_fsnotify.c
kernel/audit_tree.c
kernel/audit_watch.c

index e3e855f..c3dc158 100644 (file)
@@ -129,20 +129,11 @@ static bool dnotify_should_send_event(struct fsnotify_group *group,
                                      struct fsnotify_mark *mark, __u32 mask,
                                      void *data, int data_type)
 {
-       bool send;
-
-       /* !dir_notify_enable should never get here, don't waste time checking
-       if (!dir_notify_enable)
-               return 0; */
-
        /* not a dir, dnotify doesn't care */
        if (!S_ISDIR(inode->i_mode))
                return false;
 
-       mask = (mask & ~FS_EVENT_ON_CHILD);
-       send = (mask & mark->mask);
-
-       return send;
+       return true;
 }
 
 static void dnotify_free_mark(struct fsnotify_mark *fsn_mark)
index 666ccb7..fbd7f35 100644 (file)
@@ -185,22 +185,15 @@ static bool should_send_inode_event(struct fsnotify_group *group,
        pr_debug("%s: group=%p inode=%p mark=%p mask=%x\n",
                 __func__, group, inode, mark, mask);
 
-       /* if the event is for a child and this inode doesn't care about
-        * events on the child, don't send it! */
+       /*
+        * if the event is for a child and this inode doesn't care about
+        * events on the child, don't send it!
+        */
        if ((mask & FS_EVENT_ON_CHILD) &&
-           !(mark->mask & FS_EVENT_ON_CHILD)) {
-               mask = 0;
-       } else {
-               /*
-                * We care about children, but do we care about this particular
-                * type of event?
-                */
-               mask &= ~FS_EVENT_ON_CHILD;
-               mask &= mark->mask;
-               mask &= ~mark->ignored_mask;
-       }
-
-       return mask;
+           !(mark->mask & FS_EVENT_ON_CHILD))
+               return false;
+       else
+               return true;
 }
 
 static bool fanotify_should_send_event(struct fsnotify_group *group, struct inode *to_tell,
index 59d6399..53b31f4 100644 (file)
@@ -180,8 +180,8 @@ static int send_to_group(struct fsnotify_group *group, struct inode *to_tell,
                 " 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, mark, mask,
-                                          data, data_is))
+       if (group->ops->should_send_event(group, to_tell, mnt, mark, mask,
+                                         data, data_is) == false)
                return 0;
        if (!*event) {
                *event = fsnotify_create_event(to_tell, mask, data,
index aa3f93c..7cf518b 100644 (file)
@@ -142,23 +142,15 @@ 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)
 {
-       bool send;
-
-       pr_debug("%s: group=%p inode=%p mask=%x data=%p data_type=%d\n",
-                __func__, group, inode, mask, data, data_type);
-
-       mask = (mask & ~FS_EVENT_ON_CHILD);
-       send = (mark->mask & mask);
-
-       if (send && (mark->mask & FS_EXCL_UNLINK) &&
+       if ((mark->mask & FS_EXCL_UNLINK) &&
            (data_type == FSNOTIFY_EVENT_FILE)) {
                struct file *file  = data;
 
                if (d_unlinked(file->f_path.dentry))
-                       send = false;
+                       return false;
        }
 
-       return send;
+       return true;
 }
 
 /*
index 584b943..2abb99f 100644 (file)
@@ -923,7 +923,7 @@ static bool audit_tree_send_event(struct fsnotify_group *group, struct inode *in
                                  struct vfsmount *mnt, struct fsnotify_mark *mark,
                                  __u32 mask, void *data, int data_type)
 {
-       return 0;
+       return false;
 }
 
 static const struct fsnotify_ops audit_tree_ops = {
index 9173bcf..097a61c 100644 (file)
@@ -514,12 +514,7 @@ static bool audit_watch_should_send_event(struct fsnotify_group *group, struct i
                                          struct vfsmount *mnt, struct fsnotify_mark *mark,
                                          __u32 mask, void *data, int data_type)
 {
-       bool send;
-
-       mask = (mask & ~FS_EVENT_ON_CHILD);
-       send = (mark->mask & mask);
-
-       return send;
+       return true;
 }
 
 /* Update watch data in audit rules based on fsnotify events. */