lkml.org 
[lkml]   [2021]   [Sep]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 223/260] tcp: fix tp->undo_retrans accounting in tcp_sacktag_one()
    Date
    From: zhenggy <zhenggy@chinatelecom.cn>

    commit 4f884f3962767877d7aabbc1ec124d2c307a4257 upstream.

    Commit 10d3be569243 ("tcp-tso: do not split TSO packets at retransmit
    time") may directly retrans a multiple segments TSO/GSO packet without
    split, Since this commit, we can no longer assume that a retransmitted
    packet is a single segment.

    This patch fixes the tp->undo_retrans accounting in tcp_sacktag_one()
    that use the actual segments(pcount) of the retransmitted packet.

    Before that commit (10d3be569243), the assumption underlying the
    tp->undo_retrans-- seems correct.

    Fixes: 10d3be569243 ("tcp-tso: do not split TSO packets at retransmit time")
    Signed-off-by: zhenggy <zhenggy@chinatelecom.cn>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Acked-by: Yuchung Cheng <ycheng@google.com>
    Acked-by: Neal Cardwell <ncardwell@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/ipv4/tcp_input.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/net/ipv4/tcp_input.c
    +++ b/net/ipv4/tcp_input.c
    @@ -1209,7 +1209,7 @@ static u8 tcp_sacktag_one(struct sock *s
    if (dup_sack && (sacked & TCPCB_RETRANS)) {
    if (tp->undo_marker && tp->undo_retrans > 0 &&
    after(end_seq, tp->undo_marker))
    - tp->undo_retrans--;
    + tp->undo_retrans = max_t(int, 0, tp->undo_retrans - pcount);
    if ((sacked & TCPCB_SACKED_ACKED) &&
    before(start_seq, state->reord))
    state->reord = start_seq;

    \
     
     \ /
      Last update: 2021-09-20 20:26    [W:2.518 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site