diff options
Diffstat (limited to 'net/ipv4/tcp_input.c')
| -rw-r--r-- | net/ipv4/tcp_input.c | 11 | 
1 files changed, 6 insertions, 5 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 9615e72656d1..518f04355fbf 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -3488,10 +3488,8 @@ static void tcp_replace_ts_recent(struct tcp_sock *tp, u32 seq)  	}  } -/* This routine deals with acks during a TLP episode. - * We mark the end of a TLP episode on receiving TLP dupack or when - * ack is after tlp_high_seq. - * Ref: loss detection algorithm in draft-dukkipati-tcpm-tcp-loss-probe. +/* This routine deals with acks during a TLP episode and ends an episode by + * resetting tlp_high_seq. Ref: TLP algorithm in draft-ietf-tcpm-rack   */  static void tcp_process_tlp_ack(struct sock *sk, u32 ack, int flag)  { @@ -3500,7 +3498,10 @@ static void tcp_process_tlp_ack(struct sock *sk, u32 ack, int flag)  	if (before(ack, tp->tlp_high_seq))  		return; -	if (flag & FLAG_DSACKING_ACK) { +	if (!tp->tlp_retrans) { +		/* TLP of new data has been acknowledged */ +		tp->tlp_high_seq = 0; +	} else if (flag & FLAG_DSACKING_ACK) {  		/* This DSACK means original and TLP probe arrived; no loss */  		tp->tlp_high_seq = 0;  	} else if (after(ack, tp->tlp_high_seq)) {  | 
