aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_input.c
diff options
context:
space:
mode:
authorIlpo Järvinen <ilpo.jarvinen@helsinki.fi>2007-10-09 04:24:15 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:52:08 -0400
commit91fed7a15c9222af29a653ecb0ee72cff178fdd8 (patch)
tree53c72bd6c1bf3216e46565761bc34ea066f5b995 /net/ipv4/tcp_input.c
parent0dde7b5404a3d52dcd9ce66d46197f6c3ca97dda (diff)
[TCP]: Make fackets_out accurate
Substraction for fackets_out is unconditional when snd_una advances, thus there's no need to do it inside the loop. Just make sure correct bounds are honored. Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r--net/ipv4/tcp_input.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index f9e4d7ad68b7..46aedd6ca020 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -2299,8 +2299,8 @@ tcp_fastretrans_alert(struct sock *sk, int pkts_acked, int flag)
2299 * 1. Reno does not count dupacks (sacked_out) automatically. */ 2299 * 1. Reno does not count dupacks (sacked_out) automatically. */
2300 if (!tp->packets_out) 2300 if (!tp->packets_out)
2301 tp->sacked_out = 0; 2301 tp->sacked_out = 0;
2302 /* 2. SACK counts snd_fack in packets inaccurately. */ 2302
2303 if (tp->sacked_out == 0) 2303 if (WARN_ON(!tp->sacked_out && tp->fackets_out))
2304 tp->fackets_out = 0; 2304 tp->fackets_out = 0;
2305 2305
2306 /* Now state machine starts. 2306 /* Now state machine starts.
@@ -2568,10 +2568,6 @@ static int tcp_tso_acked(struct sock *sk, struct sk_buff *skb,
2568 } else if (*seq_rtt < 0) 2568 } else if (*seq_rtt < 0)
2569 *seq_rtt = now - scb->when; 2569 *seq_rtt = now - scb->when;
2570 2570
2571 if (tp->fackets_out) {
2572 __u32 dval = min(tp->fackets_out, packets_acked);
2573 tp->fackets_out -= dval;
2574 }
2575 /* hint's skb might be NULL but we don't need to care */ 2571 /* hint's skb might be NULL but we don't need to care */
2576 tp->fastpath_cnt_hint -= min_t(u32, packets_acked, 2572 tp->fastpath_cnt_hint -= min_t(u32, packets_acked,
2577 tp->fastpath_cnt_hint); 2573 tp->fastpath_cnt_hint);
@@ -2657,7 +2653,6 @@ static int tcp_clean_rtx_queue(struct sock *sk, __s32 *seq_rtt_p)
2657 seq_rtt = now - scb->when; 2653 seq_rtt = now - scb->when;
2658 last_ackt = skb->tstamp; 2654 last_ackt = skb->tstamp;
2659 } 2655 }
2660 tcp_dec_pcount_approx(&tp->fackets_out, skb);
2661 tp->packets_out -= tcp_skb_pcount(skb); 2656 tp->packets_out -= tcp_skb_pcount(skb);
2662 tcp_unlink_write_queue(skb, sk); 2657 tcp_unlink_write_queue(skb, sk);
2663 sk_stream_free_skb(sk, skb); 2658 sk_stream_free_skb(sk, skb);
@@ -2672,6 +2667,7 @@ static int tcp_clean_rtx_queue(struct sock *sk, __s32 *seq_rtt_p)
2672 tcp_ack_update_rtt(sk, acked, seq_rtt); 2667 tcp_ack_update_rtt(sk, acked, seq_rtt);
2673 tcp_rearm_rto(sk); 2668 tcp_rearm_rto(sk);
2674 2669
2670 tp->fackets_out -= min(pkts_acked, tp->fackets_out);
2675 if (tcp_is_reno(tp)) 2671 if (tcp_is_reno(tp))
2676 tcp_remove_reno_sacks(sk, pkts_acked); 2672 tcp_remove_reno_sacks(sk, pkts_acked);
2677 2673