Skip to content
  • Ilpo Järvinen's avatar
    [TCP]: FRTO undo response falls back to ratehalving one if ECEd · e317f6f6
    Ilpo Järvinen authored
    
    
    Undoing ssthresh is disabled in fastretrans_alert whenever
    FLAG_ECE is set by clearing prior_ssthresh. The clearing does
    not protect FRTO because FRTO operates before fastretrans_alert.
    Moving the clearing of prior_ssthresh earlier seems to be a
    suboptimal solution to the FRTO case because then FLAG_ECE will
    cause a second ssthresh reduction in try_to_open (the first
    occurred when FRTO was entered). So instead, FRTO falls back
    immediately to the rate halving response, which switches TCP to
    CA_CWR state preventing the latter reduction of ssthresh.
    
    If the first ECE arrived before the ACK after which FRTO is able
    to decide RTO as spurious, prior_ssthresh is already cleared.
    Thus no undoing for ssthresh occurs. Besides, FLAG_ECE should be
    set also in the following ACKs resulting in rate halving response
    that sees TCP is already in CA_CWR, which again prevents an extra
    ssthresh reduction on that round-trip.
    
    If the first ECE arrived before RTO, ssthresh has already been
    adapted and prior_ssthresh remains cleared on entry because TCP
    is in CA_CWR (the same applies also to a case where FRTO is
    entered more than once and ECE comes in the middle).
    
    High_seq must not be touched after tcp_enter_cwr because CWR
    round-trip calculation depends on it.
    
    I believe that after this patch, FRTO should be ECN-safe and
    even able to take advantage of synergy benefits.
    
    Signed-off-by: default avatarIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    e317f6f6