tcp: frto should not set snd_cwnd to 0
Commit 9dc274151a (tcp: fix ABC in tcp_slow_start())
uncovered a bug in FRTO code :
tcp_process_frto() is setting snd_cwnd to 0 if the number
of in flight packets is 0.
As Neal pointed out, if no packet is in flight we lost our
chance to disambiguate whether a loss timeout was spurious.
We should assume it was a proper loss.
Reported-by: Pasi Kärkkäinen <pasik@iki.fi>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
Cc: Yuchung Cheng <ycheng@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
	
	
This commit is contained in:
		
					parent
					
						
							
								973ec449bb
							
						
					
				
			
			
				commit
				
					
						2e5f421211
					
				
			
		
					 1 changed files with 2 additions and 1 deletions
				
			
		| 
						 | 
					@ -3484,7 +3484,8 @@ static bool tcp_process_frto(struct sock *sk, int flag)
 | 
				
			||||||
	    ((tp->frto_counter >= 2) && (flag & FLAG_RETRANS_DATA_ACKED)))
 | 
						    ((tp->frto_counter >= 2) && (flag & FLAG_RETRANS_DATA_ACKED)))
 | 
				
			||||||
		tp->undo_marker = 0;
 | 
							tp->undo_marker = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!before(tp->snd_una, tp->frto_highmark)) {
 | 
						if (!before(tp->snd_una, tp->frto_highmark) ||
 | 
				
			||||||
 | 
						    !tcp_packets_in_flight(tp)) {
 | 
				
			||||||
		tcp_enter_frto_loss(sk, (tp->frto_counter == 1 ? 2 : 3), flag);
 | 
							tcp_enter_frto_loss(sk, (tp->frto_counter == 1 ? 2 : 3), flag);
 | 
				
			||||||
		return true;
 | 
							return true;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue