On Wed, Mar 7, 2018 at 12:19 PM, Neal Cardwell <ncardw...@google.com> wrote: > > On Wed, Mar 7, 2018 at 7:59 AM, Ilpo Järvinen <ilpo.jarvi...@helsinki.fi> > wrote: > > A bogus undo may/will trigger when the loss recovery state is > > kept until snd_una is above high_seq. If tcp_any_retrans_done > > is zero, retrans_stamp is cleared in this transient state. On > > the next ACK, tcp_try_undo_recovery again executes and > > tcp_may_undo will always return true because tcp_packet_delayed > > has this condition: > > return !tp->retrans_stamp || ... > > > > Check for the false fast retransmit transient condition in > > tcp_packet_delayed to avoid bogus undos. Since snd_una may have > > advanced on this ACK but CA state still remains unchanged, > > prior_snd_una needs to be passed instead of tp->snd_una. > > This one also seems like a case where it would be nice to have a > specific packet-by-packet example, or trace, or packetdrill scenario. > Something that we might be able to translate into a test, or at least > to document the issue more explicitly. I am hesitate for further logic to make undo "perfect" on non-sack cases b/c undo is very complicated and SACK is extremely well-supported today. so a trace to demonstrate how severe this issue is appreciated.
> > Thanks! > neal