• Neal Cardwell's avatar
    tcp: enable xmit timer fix by having TLP use time when RTO should fire · a2815817
    Neal Cardwell authored
    Have tcp_schedule_loss_probe() base the TLP scheduling decision based
    on when the RTO *should* fire. This is to enable the upcoming xmit
    timer fix in this series, where tcp_schedule_loss_probe() cannot
    assume that the last timer installed was an RTO timer (because we are
    no longer doing the "rearm RTO, rearm RTO, rearm TLP" dance on every
    ACK). So tcp_schedule_loss_probe() must independently figure out when
    an RTO would want to fire.
    
    In the new TLP implementation following in this series, we cannot
    assume that icsk_timeout was set based on an RTO; after processing a
    cumulative ACK the icsk_timeout we see can be from a previous TLP or
    RTO. So we need to independently recalculate the RTO time (instead of
    reading it out of icsk_timeout). Removing this dependency on the
    nature of icsk_timeout makes things a little easier to reason about
    anyway.
    
    Note that the old and new code should be equivalent, since they are
    both saying: "if the RTO is in the future, but at an earlier time than
    the normal TLP time, then set the TLP timer to fire when the RTO would
    have fired".
    
    Fixes: 6ba8a3b1 ("tcp: Tail loss probe (TLP)")
    Signed-off-by: default avatarNeal Cardwell <ncardwell@google.com>
    Signed-off-by: default avatarYuchung Cheng <ycheng@google.com>
    Signed-off-by: default avatarNandita Dukkipati <nanditad@google.com>
    Acked-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    a2815817
tcp_output.c 107 KB