patch-2.4.27 linux-2.4.27/net/ipv4/tcp_output.c
Next file: linux-2.4.27/net/ipv4/udp.c
Previous file: linux-2.4.27/net/ipv4/tcp_minisocks.c
Back to the patch index
Back to the overall index
- Lines: 55
- Date:
2004-08-07 16:26:07.007443463 -0700
- Orig file:
linux-2.4.26/net/ipv4/tcp_output.c
- Orig date:
2003-11-28 10:26:21.000000000 -0800
diff -urN linux-2.4.26/net/ipv4/tcp_output.c linux-2.4.27/net/ipv4/tcp_output.c
@@ -105,6 +105,9 @@
u32 restart_cwnd = tcp_init_cwnd(tp);
u32 cwnd = tp->snd_cwnd;
+ if (tcp_is_vegas(tp))
+ tcp_vegas_enable(tp);
+
tp->snd_ssthresh = tcp_current_ssthresh(tp);
restart_cwnd = min(restart_cwnd, cwnd);
@@ -223,6 +226,19 @@
tcp_header_size += (TCPOLEN_SACK_BASE_ALIGNED +
(tp->eff_sacks * TCPOLEN_SACK_PERBLOCK));
}
+
+ /*
+ * If the connection is idle and we are restarting,
+ * then we don't want to do any Vegas calculations
+ * until we get fresh RTT samples. So when we
+ * restart, we reset our Vegas state to a clean
+ * slate. After we get acks for this flight of
+ * packets, _then_ we can make Vegas calculations
+ * again.
+ */
+ if (tcp_is_vegas(tp) && tcp_packets_in_flight(tp) == 0)
+ tcp_vegas_enable(tp);
+
th = (struct tcphdr *) skb_push(skb, tcp_header_size);
skb->h.th = th;
skb_set_owner_w(skb, sk);
@@ -800,7 +816,7 @@
tp->snd_ssthresh = tcp_current_ssthresh(tp);
tp->prior_ssthresh = 0;
tp->undo_marker = 0;
- tp->ca_state = TCP_CA_Loss;
+ tcp_set_ca_state(tp, TCP_CA_Loss);
}
tcp_xmit_retransmit_queue(sk);
}
@@ -1181,6 +1197,7 @@
tp->window_clamp = dst->window;
tp->advmss = dst->advmss;
tcp_initialize_rcv_mss(sk);
+ tcp_vegas_init(tp);
tcp_select_initial_window(tcp_full_space(sk),
tp->advmss - (tp->ts_recent_stamp ? tp->tcp_header_len - sizeof(struct tcphdr) : 0),
@@ -1231,6 +1248,7 @@
TCP_SKB_CB(buff)->end_seq = tp->write_seq;
tp->snd_nxt = tp->write_seq;
tp->pushed_seq = tp->write_seq;
+ tcp_vegas_init(tp);
/* Send it off. */
TCP_SKB_CB(buff)->when = tcp_time_stamp;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)