• D
    tcp: Stalling connections: Fix timeout calculation routine · 07f29bc5
    Damian Lukowski 提交于
    This patch fixes a problem in the TCP connection timeout calculation.
    Currently, timeout decisions are made on the basis of the current
    tcp_time_stamp and retrans_stamp, which is usually set at the first
    retransmission.
    However, if the retransmission fails in tcp_retransmit_skb(),
    retrans_stamp is not updated and remains zero. This leads to wrong
    decisions in retransmits_timed_out() if tcp_time_stamp is larger than
    the specified timeout, which is very likely.
    In this case, the TCP connection dies after the first attempted
    (and unsuccessful) retransmission.
    
    With this patch, tcp_skb_cb->when is used instead, when retrans_stamp
    is not available.
    
    This bug has been introduced together with retransmits_timed_out() in
    2.6.32, as the number of retransmissions has been used for timeout
    decisions before. The corresponding commit was
    6fa12c85 (Revert Backoff [v3]:
    Calculate TCP's connection close threshold as a time value.).
    
    Thanks to Ilpo Järvinen for code suggestions and Frederic Leroy for
    testing.
    Reported-by: NFrederic Leroy <fredo@starox.org>
    Signed-off-by: NDamian Lukowski <damian@tvk.rwth-aachen.de>
    Acked-by: NIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    07f29bc5
tcp.h 45.8 KB