last_in_flight = TCP_SKB_CB(skb)->tx.in_flight;
if (before(start_seq, reord))
reord = start_seq;
if (!after(scb->end_seq, tp->high_seq))
flag |= FLAG_ORIG_SACK_ACKED;
}
退出循環(huán)后,如果是reno模式,會(huì)根據(jù)該ack是否含有FLAG_RETRANS_DATA_ACKED標(biāo)記,把FLAG_ORIG_SACK_ACKED清除
if (tcp_is_reno(tp)) {
tcp_remove_reno_sacks(sk, pkts_acked);
/* If any of the cumulatively ACKed segments was
* retransmitted, non-SACK case cannot confirm that
* progress was due to original transmission due to
* lack of TCPCB_SACKED_ACKED bits even if some of
* the packets may have been never retransmitted.
*/
if (flag & FLAG_RETRANS_DATA_ACKED)
flag &= ~FLAG_ORIG_SACK_ACKED;
}