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)