diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index af707ce0f624..09f24a456f73 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1516,8 +1516,16 @@ static void subflow_data_ready(struct sock *sk) return; } - WARN_ON_ONCE(!__mptcp_check_fallback(msk) && !subflow->mp_capable && - !subflow->mp_join && !(state & TCPF_CLOSE)); + if (!__mptcp_check_fallback(msk) && !subflow->mp_capable && + !subflow->mp_join && !(state & TCPF_CLOSE)) { + spin_lock_bh(&msk->fallback_lock); + pr_err("fallaback under lock %d req mpc %d req mpj %d state %d parent state %d send %lld received %lld\n", + __mptcp_check_fallback(msk), subflow->request_mptcp, + subflow->request_join, state, parent->sk_state, + msk->bytes_sent, msk->bytes_received); + spin_unlock_bh(&msk->fallback_lock); + WARN_ON(1); + } if (mptcp_subflow_data_available(sk)) { mptcp_data_ready(parent, sk);