if (dn_mark->dn == NULL)
                fsnotify_destroy_mark(fsn_mark);
 
-       fsnotify_recalc_group_mask(dnotify_group);
-
        mutex_unlock(&dnotify_mark_mutex);
 
        fsnotify_put_mark(fsn_mark);
        if (destroy)
                fsnotify_destroy_mark(fsn_mark);
 
-       fsnotify_recalc_group_mask(dnotify_group);
-
        mutex_unlock(&dnotify_mark_mutex);
        fsnotify_put_mark(fsn_mark);
 out_err:
 
 
        removed = fanotify_mark_remove_from_mask(fsn_mark, mask, flags);
        fsnotify_put_mark(fsn_mark);
-       if (removed & group->mask)
-               fsnotify_recalc_group_mask(group);
        if (removed & mnt->mnt_fsnotify_mask)
                fsnotify_recalc_vfsmount_mask(mnt);
 
        removed = fanotify_mark_remove_from_mask(fsn_mark, mask, flags);
        /* matches the fsnotify_find_inode_mark() */
        fsnotify_put_mark(fsn_mark);
-
-       if (removed & group->mask)
-               fsnotify_recalc_group_mask(group);
        if (removed & inode->i_fsnotify_mask)
                fsnotify_recalc_inode_mask(inode);
 
        }
        added = fanotify_mark_add_to_mask(fsn_mark, mask, flags);
        fsnotify_put_mark(fsn_mark);
-       if (added) {
-               if (added & ~group->mask)
-                       fsnotify_recalc_group_mask(group);
-               if (added & ~mnt->mnt_fsnotify_mask)
-                       fsnotify_recalc_vfsmount_mask(mnt);
-       }
+       if (added & ~mnt->mnt_fsnotify_mask)
+               fsnotify_recalc_vfsmount_mask(mnt);
+
        return 0;
 }
 
        }
        added = fanotify_mark_add_to_mask(fsn_mark, mask, flags);
        fsnotify_put_mark(fsn_mark);
-       if (added) {
-               if (added & ~group->mask)
-                       fsnotify_recalc_group_mask(group);
-               if (added & ~inode->i_fsnotify_mask)
-                       fsnotify_recalc_inode_mask(inode);
-       }
+       if (added & ~inode->i_fsnotify_mask)
+               fsnotify_recalc_inode_mask(inode);
        return 0;
 }
 
                        fsnotify_clear_vfsmount_marks_by_group(group);
                else
                        fsnotify_clear_inode_marks_by_group(group);
-               fsnotify_recalc_group_mask(group);
                break;
        default:
                ret = -EINVAL;
 
 /* all groups registered to receive mount point filesystem notifications */
 LIST_HEAD(fsnotify_vfsmount_groups);
 
-/*
- * Update the group->mask by running all of the marks associated with this
- * group and finding the bitwise | of all of the mark->mask.
- */
-void fsnotify_recalc_group_mask(struct fsnotify_group *group)
-{
-       __u32 mask = 0;
-       struct fsnotify_mark *mark;
-
-       spin_lock(&group->mark_lock);
-       list_for_each_entry(mark, &group->marks_list, g_list)
-               mask |= mark->mask;
-       group->mask = mask;
-       spin_unlock(&group->mark_lock);
-}
-
 void fsnotify_add_vfsmount_group(struct fsnotify_group *group)
 {
        struct fsnotify_group *group_iter;
 
                int dropped = (old_mask & ~new_mask);
                /* more bits in this fsn_mark than the inode's mask? */
                int do_inode = (new_mask & ~inode->i_fsnotify_mask);
-               /* more bits in this fsn_mark than the group? */
-               int do_group = (new_mask & ~group->mask);
 
                /* update the inode with this new fsn_mark */
                if (dropped || do_inode)
                        fsnotify_recalc_inode_mask(inode);
 
-               /* update the group mask with the new mask */
-               if (dropped || do_group)
-                       fsnotify_recalc_group_mask(group);
        }
 
        /* return the wd */
        /* return the watch descriptor for this new mark */
        ret = tmp_i_mark->wd;
 
-       /* if this mark added a new event update the group mask */
-       if (mask & ~group->mask)
-               fsnotify_recalc_group_mask(group);
-
 out_err:
        /* match the ref from fsnotify_init_mark() */
        fsnotify_put_mark(&tmp_i_mark->fsn_mark);
 
         */
        struct list_head vfsmount_group_list;
 
-       /*
-        * Defines all of the event types in which this group is interested.
-        * This mask is a bitwise OR of the FS_* events from above.  Each time
-        * this mask changes for a group (if it changes) the correct functions
-        * must be called to update the global structures which indicate global
-        * interest in event types.
-        */
-       __u32 mask;
-
        /*
         * How the refcnt is used is up to each group.  When the refcnt hits 0
         * fsnotify will clean up all of the resources associated with this group.
 
 /* get a reference to an existing or create a new group */
 extern struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *ops);
-/* run all marks associated with this group and update group->mask */
-extern void fsnotify_recalc_group_mask(struct fsnotify_group *group);
 /* drop reference on a group from fsnotify_alloc_group */
 extern void fsnotify_put_group(struct fsnotify_group *group);
 
 
                return ERR_PTR(ret);
        }
 
-       fsnotify_recalc_group_mask(audit_watch_group);
-
        return parent;
 }
 
        mutex_unlock(&audit_filter_mutex);
 
        fsnotify_destroy_mark(&parent->mark);
-
-       fsnotify_recalc_group_mask(audit_watch_group);
-
 }
 
 /* Get path information necessary for adding watches. */
                        audit_put_parent(parent);
                }
        }
-
-       fsnotify_recalc_group_mask(audit_watch_group);
-
 }
 
 static bool audit_watch_should_send_event(struct fsnotify_group *group, struct inode *inode,