pr_debug("msk=%p", msk);
 
-       lock_sock(sock->sk);
-       if (sock->sk->sk_state != TCP_LISTEN)
-               goto unlock_fail;
-
        ssock = __mptcp_nmpc_socket(msk);
        if (!ssock)
-               goto unlock_fail;
-
-       clear_bit(MPTCP_DATA_READY, &msk->flags);
-       sock_hold(ssock->sk);
-       release_sock(sock->sk);
+               return -EINVAL;
 
        err = ssock->ops->accept(sock, newsock, flags, kern);
        if (err == 0 && !mptcp_is_tcpsk(newsock->sk)) {
                release_sock(newsk);
        }
 
-       if (inet_csk_listen_poll(ssock->sk))
-               set_bit(MPTCP_DATA_READY, &msk->flags);
-       sock_put(ssock->sk);
        return err;
-
-unlock_fail:
-       release_sock(sock->sk);
-       return -EINVAL;
 }
 
 static __poll_t mptcp_check_readable(struct mptcp_sock *msk)
 
        state = inet_sk_state_load(sk);
        pr_debug("msk=%p state=%d flags=%lx", msk, state, msk->flags);
-       if (state == TCP_LISTEN)
-               return test_bit(MPTCP_DATA_READY, &msk->flags) ? EPOLLIN | EPOLLRDNORM : 0;
+       if (state == TCP_LISTEN) {
+               if (WARN_ON_ONCE(!msk->subflow || !msk->subflow->sk))
+                       return 0;
+
+               return inet_csk_listen_poll(msk->subflow->sk);
+       }
 
        if (state != TCP_SYN_SENT && state != TCP_SYN_RECV) {
                mask |= mptcp_check_readable(msk);