[TCP]: No fackets_out/highest_sack tuning when SACK isn't enabled
authorIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
Mon, 1 Oct 2007 22:27:19 +0000 (15:27 -0700)
committerDavid S. Miller <davem@sunset.davemloft.net>
Wed, 10 Oct 2007 23:53:58 +0000 (16:53 -0700)
This was found due to bug report from Cedric Le Goater though
it turned this turned out to be unrelated bug.

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

index 94c80113df7e06e3e3e92e63b5db6fde7c72f889..6199abeb0f5e8ddf328210ad2babd1bfce120303 100644 (file)
@@ -660,7 +660,7 @@ static void tcp_set_skb_tso_segs(struct sock *sk, struct sk_buff *skb, unsigned
 static void tcp_adjust_fackets_out(struct tcp_sock *tp, struct sk_buff *skb,
                                   int decr)
 {
-       if (!tp->sacked_out)
+       if (!tp->sacked_out || tcp_is_reno(tp))
                return;
 
        if (!before(tp->highest_sack, TCP_SKB_CB(skb)->seq))
@@ -712,7 +712,8 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len, unsigned int mss
        TCP_SKB_CB(buff)->end_seq = TCP_SKB_CB(skb)->end_seq;
        TCP_SKB_CB(skb)->end_seq = TCP_SKB_CB(buff)->seq;
 
-       if (tp->sacked_out && (TCP_SKB_CB(skb)->seq == tp->highest_sack))
+       if (tcp_is_sack(tp) && tp->sacked_out &&
+           (TCP_SKB_CB(skb)->seq == tp->highest_sack))
                tp->highest_sack = TCP_SKB_CB(buff)->seq;
 
        /* PSH and FIN should only be set in the second packet. */
@@ -1718,7 +1719,7 @@ static void tcp_retrans_try_collapse(struct sock *sk, struct sk_buff *skb, int m
                BUG_ON(tcp_skb_pcount(skb) != 1 ||
                       tcp_skb_pcount(next_skb) != 1);
 
-               if (WARN_ON(tp->sacked_out &&
+               if (WARN_ON(tcp_is_sack(tp) && tp->sacked_out &&
                    (TCP_SKB_CB(next_skb)->seq == tp->highest_sack)))
                        return;