• Ilpo Järvinen's avatar
    tcp FRTO: Fix fallback to conventional recovery · a1c1f281
    Ilpo Järvinen authored
    It seems that commit 009a2e3e ("[TCP] FRTO: Improve
    interoperability with other undo_marker users") run into
    another land-mine which caused fallback to conventional
    recovery to break:
    
    1. Cumulative ACK arrives after FRTO retransmission
    2. tcp_try_to_open sees zero retrans_out, clears retrans_stamp
       which should be kept like in CA_Loss state it would be
    3. undo_marker change allowed tcp_packet_delayed to return
       true because of the cleared retrans_stamp once FRTO is
       terminated causing LossUndo to occur, which means all loss
       markings FRTO made are reverted.
    
    This means that the conventional recovery basically recovered
    one loss per RTT, which is not that efficient. It was quite
    unobvious that the undo_marker change broken something like
    this, I had a quite long session to track it down because of
    the non-intuitiviness of the bug (luckily I had a trivial
    reproducer at hand and I was also able to learn to use kprobes
    in the process as well :-)).
    
    This together with the NewReno+FRTO fix and FRTO in-order
    workaround this fixes Damon's problems, this and the first
    mentioned are enough to fix Bugzilla #10063.
    Signed-off-by: default avatarIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
    Reported-by: default avatarDamon L. Chesser <damon@damtek.com>
    Tested-by: default avatarDamon L. Chesser <damon@damtek.com>
    Tested-by: default avatarSebastian Hyrwall <zibbe@cisko.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    a1c1f281
tcp_input.c 156 KB