• Yuchung Cheng's avatar
    tcp: improve undo on timeout · 989e04c5
    Yuchung Cheng authored
    Upon timeout, undo (via both timestamps/Eifel and DSACKs) was
    disabled if any retransmits were still in flight.  The concern was
    perhaps that spurious retransmission sent in a previous recovery
    episode may trigger DSACKs to falsely undo the current recovery.
    
    However, this inadvertently misses undo opportunities (using either
    TCP timestamps or DSACKs) when timeout occurs during a loss episode,
    i.e.  recurring timeouts or timeout during fast recovery. In these
    cases some retransmissions will be in flight but we should allow
    undo. Furthermore, we should only reset undo_marker and undo_retrans
    upon timeout if we are starting a new recovery episode. Finally,
    when we do reset our undo state, we now do so in a manner similar
    to tcp_enter_recovery(), so that we require a DSACK for each of
    the outstsanding retransmissions. This will achieve the original
    goal by requiring that we receive the same number of DSACKs as
    retransmissions.
    
    This patch increases the undo events by 50% on Google servers.
    Signed-off-by: default avatarYuchung Cheng <ycheng@google.com>
    Signed-off-by: default avatarNeal Cardwell <ncardwell@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    989e04c5
tcp.h 11.9 KB