diff options
author | Ingo Molnar <mingo@kernel.org> | 2015-03-05 14:52:18 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2015-03-05 14:52:18 -0500 |
commit | 33ca8a53f262b4af40611bea331b8c87d133af72 (patch) | |
tree | d6468c820a556c4915bcb5b761204a0fb19e8225 /net/ipv4/tcp_ipv4.c | |
parent | db2dcb4f91d5fec5c346a82c309187ee821e2495 (diff) | |
parent | 13a7a6ac0a11197edcd0f756a035f472b42cdf8b (diff) |
Merge tag 'v4.0-rc2' into irq/core, to refresh the tree before applying new changes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'net/ipv4/tcp_ipv4.c')
-rw-r--r-- | net/ipv4/tcp_ipv4.c | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index a3f72d7fc06c..5a2dfed4783b 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
@@ -683,7 +683,8 @@ static void tcp_v4_send_reset(struct sock *sk, struct sk_buff *skb) | |||
683 | arg.bound_dev_if = sk->sk_bound_dev_if; | 683 | arg.bound_dev_if = sk->sk_bound_dev_if; |
684 | 684 | ||
685 | arg.tos = ip_hdr(skb)->tos; | 685 | arg.tos = ip_hdr(skb)->tos; |
686 | ip_send_unicast_reply(net, skb, &TCP_SKB_CB(skb)->header.h4.opt, | 686 | ip_send_unicast_reply(*this_cpu_ptr(net->ipv4.tcp_sk), |
687 | skb, &TCP_SKB_CB(skb)->header.h4.opt, | ||
687 | ip_hdr(skb)->saddr, ip_hdr(skb)->daddr, | 688 | ip_hdr(skb)->saddr, ip_hdr(skb)->daddr, |
688 | &arg, arg.iov[0].iov_len); | 689 | &arg, arg.iov[0].iov_len); |
689 | 690 | ||
@@ -767,7 +768,8 @@ static void tcp_v4_send_ack(struct sk_buff *skb, u32 seq, u32 ack, | |||
767 | if (oif) | 768 | if (oif) |
768 | arg.bound_dev_if = oif; | 769 | arg.bound_dev_if = oif; |
769 | arg.tos = tos; | 770 | arg.tos = tos; |
770 | ip_send_unicast_reply(net, skb, &TCP_SKB_CB(skb)->header.h4.opt, | 771 | ip_send_unicast_reply(*this_cpu_ptr(net->ipv4.tcp_sk), |
772 | skb, &TCP_SKB_CB(skb)->header.h4.opt, | ||
771 | ip_hdr(skb)->saddr, ip_hdr(skb)->daddr, | 773 | ip_hdr(skb)->saddr, ip_hdr(skb)->daddr, |
772 | &arg, arg.iov[0].iov_len); | 774 | &arg, arg.iov[0].iov_len); |
773 | 775 | ||
@@ -1340,6 +1342,8 @@ struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
1340 | } | 1342 | } |
1341 | sk_setup_caps(newsk, dst); | 1343 | sk_setup_caps(newsk, dst); |
1342 | 1344 | ||
1345 | tcp_ca_openreq_child(newsk, dst); | ||
1346 | |||
1343 | tcp_sync_mss(newsk, dst_mtu(dst)); | 1347 | tcp_sync_mss(newsk, dst_mtu(dst)); |
1344 | newtp->advmss = dst_metric_advmss(dst); | 1348 | newtp->advmss = dst_metric_advmss(dst); |
1345 | if (tcp_sk(sk)->rx_opt.user_mss && | 1349 | if (tcp_sk(sk)->rx_opt.user_mss && |
@@ -2428,14 +2432,40 @@ struct proto tcp_prot = { | |||
2428 | }; | 2432 | }; |
2429 | EXPORT_SYMBOL(tcp_prot); | 2433 | EXPORT_SYMBOL(tcp_prot); |
2430 | 2434 | ||
2435 | static void __net_exit tcp_sk_exit(struct net *net) | ||
2436 | { | ||
2437 | int cpu; | ||
2438 | |||
2439 | for_each_possible_cpu(cpu) | ||
2440 | inet_ctl_sock_destroy(*per_cpu_ptr(net->ipv4.tcp_sk, cpu)); | ||
2441 | free_percpu(net->ipv4.tcp_sk); | ||
2442 | } | ||
2443 | |||
2431 | static int __net_init tcp_sk_init(struct net *net) | 2444 | static int __net_init tcp_sk_init(struct net *net) |
2432 | { | 2445 | { |
2446 | int res, cpu; | ||
2447 | |||
2448 | net->ipv4.tcp_sk = alloc_percpu(struct sock *); | ||
2449 | if (!net->ipv4.tcp_sk) | ||
2450 | return -ENOMEM; | ||
2451 | |||
2452 | for_each_possible_cpu(cpu) { | ||
2453 | struct sock *sk; | ||
2454 | |||
2455 | res = inet_ctl_sock_create(&sk, PF_INET, SOCK_RAW, | ||
2456 | IPPROTO_TCP, net); | ||
2457 | if (res) | ||
2458 | goto fail; | ||
2459 | *per_cpu_ptr(net->ipv4.tcp_sk, cpu) = sk; | ||
2460 | } | ||
2433 | net->ipv4.sysctl_tcp_ecn = 2; | 2461 | net->ipv4.sysctl_tcp_ecn = 2; |
2462 | net->ipv4.sysctl_tcp_base_mss = TCP_BASE_MSS; | ||
2434 | return 0; | 2463 | return 0; |
2435 | } | ||
2436 | 2464 | ||
2437 | static void __net_exit tcp_sk_exit(struct net *net) | 2465 | fail: |
2438 | { | 2466 | tcp_sk_exit(net); |
2467 | |||
2468 | return res; | ||
2439 | } | 2469 | } |
2440 | 2470 | ||
2441 | static void __net_exit tcp_sk_exit_batch(struct list_head *net_exit_list) | 2471 | static void __net_exit tcp_sk_exit_batch(struct list_head *net_exit_list) |