}
 
        fsnotify_foreach_iter_mark_type(iter_info, mark, type) {
-               /* Apply ignore mask regardless of ISDIR and ON_CHILD flags */
+               /* Apply ignore mask regardless of mark's ISDIR flag */
                marks_ignored_mask |= mark->ignored_mask;
 
                /*
                if (event_mask & FS_ISDIR && !(mark->mask & FS_ISDIR))
                        continue;
 
-               /*
-                * If the event is on a child and this mark is on a parent not
-                * watching children, don't send it!
-                */
-               if (type == FSNOTIFY_ITER_TYPE_PARENT &&
-                   !(mark->mask & FS_EVENT_ON_CHILD))
-                       continue;
-
                marks_mask |= mark->mask;
 
                /* Record the mark types of this group that matched the event */
 
        }
 
        if (parent_mark) {
-               /*
-                * parent_mark indicates that the parent inode is watching
-                * children and interested in this event, which is an event
-                * possible on child. But is *this mark* watching children and
-                * interested in this event?
-                */
-               if (parent_mark->mask & FS_EVENT_ON_CHILD) {
-                       ret = fsnotify_handle_inode_event(group, parent_mark, mask,
-                                                         data, data_type, dir, name, 0);
-                       if (ret)
-                               return ret;
-               }
-               if (!inode_mark)
-                       return 0;
+               ret = fsnotify_handle_inode_event(group, parent_mark, mask,
+                                                 data, data_type, dir, name, 0);
+               if (ret)
+                       return ret;
        }
 
+       if (!inode_mark)
+               return 0;
+
        if (mask & FS_EVENT_ON_CHILD) {
                /*
                 * Some events can be sent on both parent dir and child marks
        iter_info->report_mask = 0;
        fsnotify_foreach_iter_type(type) {
                mark = iter_info->marks[type];
-               if (mark && mark->group == iter_info->current_group)
+               if (mark && mark->group == iter_info->current_group) {
+                       /*
+                        * FSNOTIFY_ITER_TYPE_PARENT indicates that this inode
+                        * is watching children and interested in this event,
+                        * which is an event possible on child.
+                        * But is *this mark* watching children?
+                        */
+                       if (type == FSNOTIFY_ITER_TYPE_PARENT &&
+                           !(mark->mask & FS_EVENT_ON_CHILD))
+                               continue;
+
                        fsnotify_iter_set_report_type(iter_info, type);
+               }
        }
 
        return true;