do_connect:
        err = ssock->ops->connect(ssock, uaddr, addr_len, flags);
+       inet_sk(sock->sk)->defer_connect = inet_sk(ssock->sk)->defer_connect;
        sock->state = ssock->state;
 
        /* on successful connect, the msk state will be moved to established by
        if (state != TCP_SYN_SENT && state != TCP_SYN_RECV) {
                mask |= mptcp_check_readable(msk);
                mask |= mptcp_check_writeable(msk);
+       } else if (state == TCP_SYN_SENT && inet_sk(sk)->defer_connect) {
+               /* cf tcp_poll() note about TFO */
+               mask |= EPOLLOUT | EPOLLWRNORM;
        }
        if (sk->sk_shutdown == SHUTDOWN_MASK || state == TCP_CLOSE)
                mask |= EPOLLHUP;