struct fsnotify_event *fsn_event;
        struct fsnotify_group *group = inode_mark->group;
        int ret;
-       int len = 0;
+       int len = 0, wd;
        int alloc_len = sizeof(struct inotify_event_info);
        struct mem_cgroup *old_memcg;
 
        i_mark = container_of(inode_mark, struct inotify_inode_mark,
                              fsn_mark);
 
+       /*
+        * We can be racing with mark being detached. Don't report event with
+        * invalid wd.
+        */
+       wd = READ_ONCE(i_mark->wd);
+       if (wd == -1)
+               return 0;
        /*
         * Whoever is interested in the event, pays for the allocation. Do not
         * trigger OOM killer in the target monitoring memcg as it may have
        fsn_event = &event->fse;
        fsnotify_init_event(fsn_event);
        event->mask = mask;
-       event->wd = i_mark->wd;
+       event->wd = wd;
        event->sync_cookie = cookie;
        event->name_len = len;
        if (len)