git: tcp: Don't prematurely drop receiving-only connections.

Sepherosa Ziehau sephe at crater.dragonflybsd.org
Mon May 30 06:35:17 PDT 2016


commit 1bdd592fcaf87764472a2cd179661c8a9624b5a3
Author: Sepherosa Ziehau <sephe at dragonflybsd.org>
Date:   Mon May 30 20:38:40 2016 +0800

    tcp: Don't prematurely drop receiving-only connections.
    
    If the connection was persistent and receiving-only, several (12)
    sporadic device insufficient buffers would cause the connection be
    dropped prematurely:
    Upon ENOBUFS in tcp_output() for an ACK, retransmission timer is
    started.  No one will stop this retransmission timer for receiving-
    only connection, so the retransmission timer promises to expire and
    t_rxtshift is promised to be increased.  And t_rxtshift will not be
    reset to 0, since no RTT measurement will be done for receiving-only
    connection.  If this receiving-only connection lived long enough,
    and it suffered 12 sporadic device insufficient buffers, i.e.
    t_rxtshift >= 12, this receiving-only connection would be dropped
    prematurely by the retransmission timer.
    
    We now assert that for data segments, SYNs or FINs either rexmit or
    persist timer was wired upon ENOBUFS.  And don't set rexmit timer
    for other cases, i.e. ENOBUFS upon ACKs.
    
    And we no longer penalize send window upon ENOBUFS.
    
    Obtained-from: FreeBSD r300981

Summary of changes:
 sys/netinet/tcp_output.c | 22 ++++------------------
 1 file changed, 4 insertions(+), 18 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/1bdd592fcaf87764472a2cd179661c8a9624b5a3


-- 
DragonFly BSD source repository



More information about the Commits mailing list