diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index ca947519027f7..6b270eb90ccae 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -6286,8 +6286,19 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb) if (is_master_tp(tp)) { mptcp_update_metasocket(mptcp_meta_sk(sk)); } else { + struct sock *meta_sk = mptcp_meta_sk(sk); + tcp_send_ack(sk); + /* Update RTO as it might be worse/better */ + mptcp_set_rto(sk); + + /* If the new RTO would fire earlier, pull it in! */ + if (tcp_sk(meta_sk)->packets_out && + icsk->icsk_timeout > inet_csk(meta_sk)->icsk_rto + jiffies) { + tcp_rearm_rto(meta_sk); + } + mptcp_push_pending_frames(mptcp_meta_sk(sk)); } }