diff options
author | David S. Miller <davem@davemloft.net> | 2010-12-08 16:15:38 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-12-08 16:47:38 -0500 |
commit | fe6c791570efe717946ea7b7dd50aec96b70d551 (patch) | |
tree | 1becb5e8aea7a9c9a7d78f987bd73b0a5d8ee434 /net/ipv4 | |
parent | f8bf5681cf15f77692c8ad8cb95d059ff7c622c9 (diff) | |
parent | f19872575ff7819a3723154657a497d9bca66b33 (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
net/llc/af_llc.c
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/fib_trie.c | 2 | ||||
-rw-r--r-- | net/ipv4/inet_hashtables.c | 3 | ||||
-rw-r--r-- | net/ipv4/proc.c | 1 | ||||
-rw-r--r-- | net/ipv4/sysctl_net_ipv4.c | 6 | ||||
-rw-r--r-- | net/ipv4/tcp.c | 2 | ||||
-rw-r--r-- | net/ipv4/tcp_ipv4.c | 4 | ||||
-rw-r--r-- | net/ipv4/tcp_minisocks.c | 2 | ||||
-rw-r--r-- | net/ipv4/tcp_output.c | 42 |
8 files changed, 36 insertions, 26 deletions
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c index 200eb538fbb..0f280348e0f 100644 --- a/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c | |||
@@ -365,7 +365,7 @@ static struct tnode *tnode_alloc(size_t size) | |||
365 | if (size <= PAGE_SIZE) | 365 | if (size <= PAGE_SIZE) |
366 | return kzalloc(size, GFP_KERNEL); | 366 | return kzalloc(size, GFP_KERNEL); |
367 | else | 367 | else |
368 | return __vmalloc(size, GFP_KERNEL | __GFP_ZERO, PAGE_KERNEL); | 368 | return vzalloc(size); |
369 | } | 369 | } |
370 | 370 | ||
371 | static void __tnode_vfree(struct work_struct *arg) | 371 | static void __tnode_vfree(struct work_struct *arg) |
diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c index 1b344f30b46..3c0369a3a66 100644 --- a/net/ipv4/inet_hashtables.c +++ b/net/ipv4/inet_hashtables.c | |||
@@ -133,8 +133,7 @@ int __inet_inherit_port(struct sock *sk, struct sock *child) | |||
133 | } | 133 | } |
134 | } | 134 | } |
135 | } | 135 | } |
136 | sk_add_bind_node(child, &tb->owners); | 136 | inet_bind_hash(child, tb, port); |
137 | inet_csk(child)->icsk_bind_hash = tb; | ||
138 | spin_unlock(&head->lock); | 137 | spin_unlock(&head->lock); |
139 | 138 | ||
140 | return 0; | 139 | return 0; |
diff --git a/net/ipv4/proc.c b/net/ipv4/proc.c index 1b48eb1ed45..b14ec7d03b6 100644 --- a/net/ipv4/proc.c +++ b/net/ipv4/proc.c | |||
@@ -253,6 +253,7 @@ static const struct snmp_mib snmp4_net_list[] = { | |||
253 | SNMP_MIB_ITEM("TCPMinTTLDrop", LINUX_MIB_TCPMINTTLDROP), | 253 | SNMP_MIB_ITEM("TCPMinTTLDrop", LINUX_MIB_TCPMINTTLDROP), |
254 | SNMP_MIB_ITEM("TCPDeferAcceptDrop", LINUX_MIB_TCPDEFERACCEPTDROP), | 254 | SNMP_MIB_ITEM("TCPDeferAcceptDrop", LINUX_MIB_TCPDEFERACCEPTDROP), |
255 | SNMP_MIB_ITEM("IPReversePathFilter", LINUX_MIB_IPRPFILTER), | 255 | SNMP_MIB_ITEM("IPReversePathFilter", LINUX_MIB_IPRPFILTER), |
256 | SNMP_MIB_ITEM("TCPTimeWaitOverflow", LINUX_MIB_TCPTIMEWAITOVERFLOW), | ||
256 | SNMP_MIB_SENTINEL | 257 | SNMP_MIB_SENTINEL |
257 | }; | 258 | }; |
258 | 259 | ||
diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c index e91911d7aae..1b4ec21497a 100644 --- a/net/ipv4/sysctl_net_ipv4.c +++ b/net/ipv4/sysctl_net_ipv4.c | |||
@@ -26,6 +26,8 @@ static int zero; | |||
26 | static int tcp_retr1_max = 255; | 26 | static int tcp_retr1_max = 255; |
27 | static int ip_local_port_range_min[] = { 1, 1 }; | 27 | static int ip_local_port_range_min[] = { 1, 1 }; |
28 | static int ip_local_port_range_max[] = { 65535, 65535 }; | 28 | static int ip_local_port_range_max[] = { 65535, 65535 }; |
29 | static int tcp_adv_win_scale_min = -31; | ||
30 | static int tcp_adv_win_scale_max = 31; | ||
29 | 31 | ||
30 | /* Update system visible IP port range */ | 32 | /* Update system visible IP port range */ |
31 | static void set_local_port_range(int range[2]) | 33 | static void set_local_port_range(int range[2]) |
@@ -426,7 +428,9 @@ static struct ctl_table ipv4_table[] = { | |||
426 | .data = &sysctl_tcp_adv_win_scale, | 428 | .data = &sysctl_tcp_adv_win_scale, |
427 | .maxlen = sizeof(int), | 429 | .maxlen = sizeof(int), |
428 | .mode = 0644, | 430 | .mode = 0644, |
429 | .proc_handler = proc_dointvec | 431 | .proc_handler = proc_dointvec_minmax, |
432 | .extra1 = &tcp_adv_win_scale_min, | ||
433 | .extra2 = &tcp_adv_win_scale_max, | ||
430 | }, | 434 | }, |
431 | { | 435 | { |
432 | .procname = "tcp_tw_reuse", | 436 | .procname = "tcp_tw_reuse", |
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 2bb46d55f40..6c11eece262 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c | |||
@@ -2244,7 +2244,7 @@ static int do_tcp_setsockopt(struct sock *sk, int level, | |||
2244 | /* Values greater than interface MTU won't take effect. However | 2244 | /* Values greater than interface MTU won't take effect. However |
2245 | * at the point when this call is done we typically don't yet | 2245 | * at the point when this call is done we typically don't yet |
2246 | * know which interface is going to be used */ | 2246 | * know which interface is going to be used */ |
2247 | if (val < 64 || val > MAX_TCP_WINDOW) { | 2247 | if (val < TCP_MIN_MSS || val > MAX_TCP_WINDOW) { |
2248 | err = -EINVAL; | 2248 | err = -EINVAL; |
2249 | break; | 2249 | break; |
2250 | } | 2250 | } |
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index dd555051ec8..4fc3387aa99 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
@@ -2013,7 +2013,9 @@ get_req: | |||
2013 | } | 2013 | } |
2014 | get_sk: | 2014 | get_sk: |
2015 | sk_nulls_for_each_from(sk, node) { | 2015 | sk_nulls_for_each_from(sk, node) { |
2016 | if (sk->sk_family == st->family && net_eq(sock_net(sk), net)) { | 2016 | if (!net_eq(sock_net(sk), net)) |
2017 | continue; | ||
2018 | if (sk->sk_family == st->family) { | ||
2017 | cur = sk; | 2019 | cur = sk; |
2018 | goto out; | 2020 | goto out; |
2019 | } | 2021 | } |
diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c index 3527b51d615..80b1f80759a 100644 --- a/net/ipv4/tcp_minisocks.c +++ b/net/ipv4/tcp_minisocks.c | |||
@@ -392,7 +392,7 @@ void tcp_time_wait(struct sock *sk, int state, int timeo) | |||
392 | * socket up. We've got bigger problems than | 392 | * socket up. We've got bigger problems than |
393 | * non-graceful socket closings. | 393 | * non-graceful socket closings. |
394 | */ | 394 | */ |
395 | LIMIT_NETDEBUG(KERN_INFO "TCP: time wait bucket table overflow\n"); | 395 | NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPTIMEWAITOVERFLOW); |
396 | } | 396 | } |
397 | 397 | ||
398 | tcp_update_metrics(sk); | 398 | tcp_update_metrics(sk); |
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 749b6498588..97041f24cd2 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
@@ -231,11 +231,10 @@ void tcp_select_initial_window(int __space, __u32 mss, | |||
231 | /* when initializing use the value from init_rcv_wnd | 231 | /* when initializing use the value from init_rcv_wnd |
232 | * rather than the default from above | 232 | * rather than the default from above |
233 | */ | 233 | */ |
234 | if (init_rcv_wnd && | 234 | if (init_rcv_wnd) |
235 | (*rcv_wnd > init_rcv_wnd * mss)) | 235 | *rcv_wnd = min(*rcv_wnd, init_rcv_wnd * mss); |
236 | *rcv_wnd = init_rcv_wnd * mss; | 236 | else |
237 | else if (*rcv_wnd > init_cwnd * mss) | 237 | *rcv_wnd = min(*rcv_wnd, init_cwnd * mss); |
238 | *rcv_wnd = init_cwnd * mss; | ||
239 | } | 238 | } |
240 | 239 | ||
241 | /* Set the clamp no higher than max representable value */ | 240 | /* Set the clamp no higher than max representable value */ |
@@ -386,27 +385,30 @@ struct tcp_out_options { | |||
386 | */ | 385 | */ |
387 | static u8 tcp_cookie_size_check(u8 desired) | 386 | static u8 tcp_cookie_size_check(u8 desired) |
388 | { | 387 | { |
389 | if (desired > 0) { | 388 | int cookie_size; |
389 | |||
390 | if (desired > 0) | ||
390 | /* previously specified */ | 391 | /* previously specified */ |
391 | return desired; | 392 | return desired; |
392 | } | 393 | |
393 | if (sysctl_tcp_cookie_size <= 0) { | 394 | cookie_size = ACCESS_ONCE(sysctl_tcp_cookie_size); |
395 | if (cookie_size <= 0) | ||
394 | /* no default specified */ | 396 | /* no default specified */ |
395 | return 0; | 397 | return 0; |
396 | } | 398 | |
397 | if (sysctl_tcp_cookie_size <= TCP_COOKIE_MIN) { | 399 | if (cookie_size <= TCP_COOKIE_MIN) |
398 | /* value too small, specify minimum */ | 400 | /* value too small, specify minimum */ |
399 | return TCP_COOKIE_MIN; | 401 | return TCP_COOKIE_MIN; |
400 | } | 402 | |
401 | if (sysctl_tcp_cookie_size >= TCP_COOKIE_MAX) { | 403 | if (cookie_size >= TCP_COOKIE_MAX) |
402 | /* value too large, specify maximum */ | 404 | /* value too large, specify maximum */ |
403 | return TCP_COOKIE_MAX; | 405 | return TCP_COOKIE_MAX; |
404 | } | 406 | |
405 | if (0x1 & sysctl_tcp_cookie_size) { | 407 | if (cookie_size & 1) |
406 | /* 8-bit multiple, illegal, fix it */ | 408 | /* 8-bit multiple, illegal, fix it */ |
407 | return (u8)(sysctl_tcp_cookie_size + 0x1); | 409 | cookie_size++; |
408 | } | 410 | |
409 | return (u8)sysctl_tcp_cookie_size; | 411 | return (u8)cookie_size; |
410 | } | 412 | } |
411 | 413 | ||
412 | /* Write previously computed TCP options to the packet. | 414 | /* Write previously computed TCP options to the packet. |
@@ -1516,6 +1518,7 @@ static int tcp_tso_should_defer(struct sock *sk, struct sk_buff *skb) | |||
1516 | struct tcp_sock *tp = tcp_sk(sk); | 1518 | struct tcp_sock *tp = tcp_sk(sk); |
1517 | const struct inet_connection_sock *icsk = inet_csk(sk); | 1519 | const struct inet_connection_sock *icsk = inet_csk(sk); |
1518 | u32 send_win, cong_win, limit, in_flight; | 1520 | u32 send_win, cong_win, limit, in_flight; |
1521 | int win_divisor; | ||
1519 | 1522 | ||
1520 | if (TCP_SKB_CB(skb)->flags & TCPHDR_FIN) | 1523 | if (TCP_SKB_CB(skb)->flags & TCPHDR_FIN) |
1521 | goto send_now; | 1524 | goto send_now; |
@@ -1547,13 +1550,14 @@ static int tcp_tso_should_defer(struct sock *sk, struct sk_buff *skb) | |||
1547 | if ((skb != tcp_write_queue_tail(sk)) && (limit >= skb->len)) | 1550 | if ((skb != tcp_write_queue_tail(sk)) && (limit >= skb->len)) |
1548 | goto send_now; | 1551 | goto send_now; |
1549 | 1552 | ||
1550 | if (sysctl_tcp_tso_win_divisor) { | 1553 | win_divisor = ACCESS_ONCE(sysctl_tcp_tso_win_divisor); |
1554 | if (win_divisor) { | ||
1551 | u32 chunk = min(tp->snd_wnd, tp->snd_cwnd * tp->mss_cache); | 1555 | u32 chunk = min(tp->snd_wnd, tp->snd_cwnd * tp->mss_cache); |
1552 | 1556 | ||
1553 | /* If at least some fraction of a window is available, | 1557 | /* If at least some fraction of a window is available, |
1554 | * just use it. | 1558 | * just use it. |
1555 | */ | 1559 | */ |
1556 | chunk /= sysctl_tcp_tso_win_divisor; | 1560 | chunk /= win_divisor; |
1557 | if (limit >= chunk) | 1561 | if (limit >= chunk) |
1558 | goto send_now; | 1562 | goto send_now; |
1559 | } else { | 1563 | } else { |