Skip to content
This repository has been archived by the owner on Apr 18, 2024. It is now read-only.

Commit

Permalink
mptcp: Only update meta-RTO when we have a valid RTT measurement
Browse files Browse the repository at this point in the history
Commit fc29b3a ("mptcp: Don't update meta-RTO from subflows that are
retransmitting") for the most part already addressed the issue where a
subflow with an inflated RTO due to retransmissions might push the
meta-RTO to huge values.

However, there is one possibility where icsk_retransmits is 0, while the
RTO is still inflated. When an ACK comes in that ends up not updating
the RTT (see tcp_ack_update_rtt) but is still acknowledging data, we end
up in a situation where icsk_retransmits is 0 but the subflow's RTO is
still huge. The one additional input to whether we have a valid RTO is
icsk_backoff (see comment in tcp_ack_update_rtt()).

So, we need to take this into account as well.

Fixes: fc29b3a ("mptcp: Don't update meta-RTO from subflows that are retransmitting")
Signed-off-by: Christoph Paasch <[email protected]>
Signed-off-by: Matthieu Baerts <[email protected]>
(cherry picked from commit 3944acd)
Signed-off-by: Matthieu Baerts <[email protected]>
  • Loading branch information
cpaasch authored and matttbe committed Jun 24, 2019
1 parent 8bf32af commit e095fd3
Showing 1 changed file with 1 addition and 0 deletions.
1 change: 1 addition & 0 deletions include/net/mptcp.h
Original file line number Diff line number Diff line change
Expand Up @@ -1196,6 +1196,7 @@ static inline void mptcp_set_rto(struct sock *sk)

if ((mptcp_sk_can_send(sk_it) || sk_it->sk_state == TCP_SYN_RECV) &&
inet_csk(sk_it)->icsk_retransmits == 0 &&
inet_csk(sk_it)->icsk_backoff == 0 &&
inet_csk(sk_it)->icsk_rto > max_rto)
max_rto = inet_csk(sk_it)->icsk_rto;
}
Expand Down

0 comments on commit e095fd3

Please sign in to comment.