]> err.no Git - linux-2.6/commitdiff
[TCP]: Fix mark_head_lost to ignore R-bit when trying to mark L
authorIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
Fri, 12 Oct 2007 00:33:11 +0000 (17:33 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 12 Oct 2007 00:33:11 +0000 (17:33 -0700)
This condition (plain R) can arise at least in recovery that
is triggered after tcp_undo_loss. There isn't any reason why
they should not be marked as lost, not marking makes in_flight
estimator to return too large values.

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_input.c

index e40857e073b386550cebcb260fe3b14047a401fd..c827285b488e37cbca464b15fcdb2362d47af5da 100644 (file)
@@ -1987,7 +1987,7 @@ static void tcp_mark_head_lost(struct sock *sk,
                cnt += tcp_skb_pcount(skb);
                if (cnt > packets || after(TCP_SKB_CB(skb)->end_seq, high_seq))
                        break;
-               if (!(TCP_SKB_CB(skb)->sacked&TCPCB_TAGBITS)) {
+               if (!(TCP_SKB_CB(skb)->sacked & (TCPCB_SACKED_ACKED|TCPCB_LOST))) {
                        TCP_SKB_CB(skb)->sacked |= TCPCB_LOST;
                        tp->lost_out += tcp_skb_pcount(skb);
                        tcp_verify_retransmit_hint(tp, skb);