const unsigned char *file_name, u32 cookie)
 {
        struct fsnotify_iter_info iter_info = {};
-       struct super_block *sb = NULL;
+       struct super_block *sb = to_tell->i_sb;
        struct mount *mnt = NULL;
-       __u32 mnt_or_sb_mask = 0;
+       __u32 mnt_or_sb_mask = sb->s_fsnotify_mask;
        int ret = 0;
        __u32 test_mask = (mask & ALL_FSNOTIFY_EVENTS);
 
        if (data_is == FSNOTIFY_EVENT_PATH) {
                mnt = real_mount(((const struct path *)data)->mnt);
-               sb = mnt->mnt.mnt_sb;
-               mnt_or_sb_mask = mnt->mnt_fsnotify_mask | sb->s_fsnotify_mask;
+               mnt_or_sb_mask |= mnt->mnt_fsnotify_mask;
        }
        /* An event "on child" is not intended for a mount/sb mark */
        if (mask & FS_EVENT_ON_CHILD)
         * SRCU because we have no references to any objects and do not
         * need SRCU to keep them "alive".
         */
-       if (!to_tell->i_fsnotify_marks &&
-           (!mnt || (!mnt->mnt_fsnotify_marks && !sb->s_fsnotify_marks)))
+       if (!to_tell->i_fsnotify_marks && !sb->s_fsnotify_marks &&
+           (!mnt || !mnt->mnt_fsnotify_marks))
                return 0;
        /*
         * if this is a modify event we may need to clear the ignored masks
 
        iter_info.marks[FSNOTIFY_OBJ_TYPE_INODE] =
                fsnotify_first_mark(&to_tell->i_fsnotify_marks);
+       iter_info.marks[FSNOTIFY_OBJ_TYPE_SB] =
+               fsnotify_first_mark(&sb->s_fsnotify_marks);
        if (mnt) {
                iter_info.marks[FSNOTIFY_OBJ_TYPE_VFSMOUNT] =
                        fsnotify_first_mark(&mnt->mnt_fsnotify_marks);
-               iter_info.marks[FSNOTIFY_OBJ_TYPE_SB] =
-                       fsnotify_first_mark(&sb->s_fsnotify_marks);
        }
 
        /*