git: tcp: Don't allow persist timer if TCP connection is not established yet

Sepherosa Ziehau sephe at crater.dragonflybsd.org
Tue Dec 21 01:12:26 PST 2010


commit 94603b1beafe1a82c4e61c095b5dcd978c5e8d58
Author: Sepherosa Ziehau <sephe at dragonflybsd.org>
Date:   Tue Dec 21 16:26:34 2010 +0800

    tcp: Don't allow persist timer if TCP connection is not established yet
    
    This probably could move the un-updated snd_nxt panic earlier.
    
    The dump of the panic in http://bugs.dragonflybsd.org/issue1939 shows
    - snd_nxt is less than snd_una
    - A persist timer was fired (frame 16, tp->tt_msg->tt_prev_tasks).
    - The TCP segment triggered the panic has SYN|ACK (frame 17, th->th_flags).
      This TCP segment is considered as valid (frame 17, list), so tp->t_state
      was SYN_SENT.
    
    This explains why snd_nxt is less than snd_una:
    If tcp_output() is called by persist timer, then the persist timer is
    active and the "forced" is turned on, this causes the snd_nxt not updated
    at all.
    
    MISSING CHIAN IN THE LINK:
    How is the persist timer got set in the SYN_SENT in the first place?
    
    Hope the new panic could lift the veil...

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

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/94603b1beafe1a82c4e61c095b5dcd978c5e8d58


-- 
DragonFly BSD source repository





More information about the Commits mailing list