tcp: Fix thinko making the not-shiftable to cover S|R as well
authorIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
Sat, 6 Dec 2008 06:41:06 +0000 (22:41 -0800)
committerDavid S. Miller <davem@davemloft.net>
Sat, 6 Dec 2008 06:41:06 +0000 (22:41 -0800)
S|R won't result in S if just SACK is received. DSACK is
another story (but it is covered correctly already).

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 63c3ef6d4a1c21b448739176cf31acf872efca61..33902f6799c3f731a60e7300088d8a50134ee44b 100644 (file)
@@ -1481,7 +1481,7 @@ static struct sk_buff *tcp_shift_skb_data(struct sock *sk, struct sk_buff *skb,
 
        /* Normally R but no L won't result in plain S */
        if (!dup_sack &&
-           (TCP_SKB_CB(skb)->sacked & TCPCB_TAGBITS) == TCPCB_SACKED_RETRANS)
+           (TCP_SKB_CB(skb)->sacked & (TCPCB_LOST|TCPCB_SACKED_RETRANS)) == TCPCB_SACKED_RETRANS)
                goto fallback;
        if (!skb_can_shift(skb))
                goto fallback;