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))
        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. */
                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;