[TCP]: Access to highest_sack obsoletes forward_cnt_hint
In addition, added a reference about the purpose of the loop. Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9bff40fda0
commit
539d243fdd
|
@ -346,7 +346,6 @@ struct tcp_sock {
|
||||||
int fastpath_cnt_hint;
|
int fastpath_cnt_hint;
|
||||||
int lost_cnt_hint;
|
int lost_cnt_hint;
|
||||||
int retransmit_cnt_hint;
|
int retransmit_cnt_hint;
|
||||||
int forward_cnt_hint;
|
|
||||||
|
|
||||||
u16 advmss; /* Advertised MSS */
|
u16 advmss; /* Advertised MSS */
|
||||||
u16 prior_ssthresh; /* ssthresh saved at recovery start */
|
u16 prior_ssthresh; /* ssthresh saved at recovery start */
|
||||||
|
|
|
@ -1945,33 +1945,28 @@ void tcp_xmit_retransmit_queue(struct sock *sk)
|
||||||
* and retransmission... Both ways have their merits...
|
* and retransmission... Both ways have their merits...
|
||||||
*
|
*
|
||||||
* For now we do not retransmit anything, while we have some new
|
* For now we do not retransmit anything, while we have some new
|
||||||
* segments to send.
|
* segments to send. In the other cases, follow rule 3 for
|
||||||
|
* NextSeg() specified in RFC3517.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (tcp_may_send_now(sk))
|
if (tcp_may_send_now(sk))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (tp->forward_skb_hint) {
|
/* If nothing is SACKed, highest_sack in the loop won't be valid */
|
||||||
|
if (!tp->sacked_out)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (tp->forward_skb_hint)
|
||||||
skb = tp->forward_skb_hint;
|
skb = tp->forward_skb_hint;
|
||||||
packet_cnt = tp->forward_cnt_hint;
|
else
|
||||||
} else{
|
|
||||||
skb = tcp_write_queue_head(sk);
|
skb = tcp_write_queue_head(sk);
|
||||||
packet_cnt = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
tcp_for_write_queue_from(skb, sk) {
|
tcp_for_write_queue_from(skb, sk) {
|
||||||
if (skb == tcp_send_head(sk))
|
if (skb == tcp_send_head(sk))
|
||||||
break;
|
break;
|
||||||
tp->forward_cnt_hint = packet_cnt;
|
|
||||||
tp->forward_skb_hint = skb;
|
tp->forward_skb_hint = skb;
|
||||||
|
|
||||||
/* Similar to the retransmit loop above we
|
if (after(TCP_SKB_CB(skb)->seq, tp->highest_sack))
|
||||||
* can pretend that the retransmitted SKB
|
|
||||||
* we send out here will be composed of one
|
|
||||||
* real MSS sized packet because tcp_retransmit_skb()
|
|
||||||
* will fragment it if necessary.
|
|
||||||
*/
|
|
||||||
if (++packet_cnt > tp->fackets_out)
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (tcp_packets_in_flight(tp) >= tp->snd_cwnd)
|
if (tcp_packets_in_flight(tp) >= tp->snd_cwnd)
|
||||||
|
|
Loading…
Reference in New Issue