if (unlikely(state == TCP_CLOSE))
                goto unlock;
 
+       mptcp_push_pending(sk, 0);
        mptcp_check_data_fin_ack(sk);
        __mptcp_flush_join_list(msk);
 
        if (!mptcp_send_head(sk))
                return;
 
-       if (!sock_owned_by_user(sk))
-               __mptcp_subflow_push_pending(sk, ssk);
-       else
+       if (!sock_owned_by_user(sk)) {
+               if (mptcp_subflow_get_send(mptcp_sk(sk)) == ssk)
+                       __mptcp_subflow_push_pending(sk, ssk);
+               else
+                       mptcp_schedule_work(sk);
+       } else {
                set_bit(MPTCP_PUSH_PENDING, &mptcp_sk(sk)->flags);
+       }
 }
 
 #define MPTCP_DEFERRED_ALL (TCPF_WRITE_TIMER_DEFERRED)