diff options
Diffstat (limited to 'net/ipv4/tcp_output.c')
-rw-r--r-- | net/ipv4/tcp_output.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index d29ef79c00ca..debf23581606 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
@@ -998,7 +998,7 @@ unsigned int tcp_current_mss(struct sock *sk, int large_allowed) | |||
998 | xmit_size_goal = mss_now; | 998 | xmit_size_goal = mss_now; |
999 | 999 | ||
1000 | if (doing_tso) { | 1000 | if (doing_tso) { |
1001 | xmit_size_goal = (65535 - | 1001 | xmit_size_goal = ((sk->sk_gso_max_size - 1) - |
1002 | inet_csk(sk)->icsk_af_ops->net_header_len - | 1002 | inet_csk(sk)->icsk_af_ops->net_header_len - |
1003 | inet_csk(sk)->icsk_ext_hdr_len - | 1003 | inet_csk(sk)->icsk_ext_hdr_len - |
1004 | tp->tcp_header_len); | 1004 | tp->tcp_header_len); |
@@ -1057,7 +1057,7 @@ static unsigned int tcp_mss_split_point(struct sock *sk, struct sk_buff *skb, | |||
1057 | 1057 | ||
1058 | needed = min(skb->len, window); | 1058 | needed = min(skb->len, window); |
1059 | 1059 | ||
1060 | if (skb == tcp_write_queue_tail(sk) && cwnd_len <= needed) | 1060 | if (cwnd_len <= needed) |
1061 | return cwnd_len; | 1061 | return cwnd_len; |
1062 | 1062 | ||
1063 | return needed - needed % mss_now; | 1063 | return needed - needed % mss_now; |
@@ -1282,7 +1282,7 @@ static int tcp_tso_should_defer(struct sock *sk, struct sk_buff *skb) | |||
1282 | limit = min(send_win, cong_win); | 1282 | limit = min(send_win, cong_win); |
1283 | 1283 | ||
1284 | /* If a full-sized TSO skb can be sent, do it. */ | 1284 | /* If a full-sized TSO skb can be sent, do it. */ |
1285 | if (limit >= 65536) | 1285 | if (limit >= sk->sk_gso_max_size) |
1286 | goto send_now; | 1286 | goto send_now; |
1287 | 1287 | ||
1288 | if (sysctl_tcp_tso_win_divisor) { | 1288 | if (sysctl_tcp_tso_win_divisor) { |
@@ -2236,7 +2236,11 @@ struct sk_buff *tcp_make_synack(struct sock *sk, struct dst_entry *dst, | |||
2236 | 2236 | ||
2237 | /* RFC1323: The window in SYN & SYN/ACK segments is never scaled. */ | 2237 | /* RFC1323: The window in SYN & SYN/ACK segments is never scaled. */ |
2238 | th->window = htons(min(req->rcv_wnd, 65535U)); | 2238 | th->window = htons(min(req->rcv_wnd, 65535U)); |
2239 | 2239 | #ifdef CONFIG_SYN_COOKIES | |
2240 | if (unlikely(req->cookie_ts)) | ||
2241 | TCP_SKB_CB(skb)->when = cookie_init_timestamp(req); | ||
2242 | else | ||
2243 | #endif | ||
2240 | TCP_SKB_CB(skb)->when = tcp_time_stamp; | 2244 | TCP_SKB_CB(skb)->when = tcp_time_stamp; |
2241 | tcp_syn_build_options((__be32 *)(th + 1), dst_metric(dst, RTAX_ADVMSS), ireq->tstamp_ok, | 2245 | tcp_syn_build_options((__be32 *)(th + 1), dst_metric(dst, RTAX_ADVMSS), ireq->tstamp_ok, |
2242 | ireq->sack_ok, ireq->wscale_ok, ireq->rcv_wscale, | 2246 | ireq->sack_ok, ireq->wscale_ok, ireq->rcv_wscale, |
@@ -2571,6 +2575,7 @@ void tcp_send_probe0(struct sock *sk) | |||
2571 | } | 2575 | } |
2572 | } | 2576 | } |
2573 | 2577 | ||
2578 | EXPORT_SYMBOL(tcp_select_initial_window); | ||
2574 | EXPORT_SYMBOL(tcp_connect); | 2579 | EXPORT_SYMBOL(tcp_connect); |
2575 | EXPORT_SYMBOL(tcp_make_synack); | 2580 | EXPORT_SYMBOL(tcp_make_synack); |
2576 | EXPORT_SYMBOL(tcp_simple_retransmit); | 2581 | EXPORT_SYMBOL(tcp_simple_retransmit); |