diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2010-12-09 12:17:25 -0500 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2010-12-09 12:17:25 -0500 |
commit | d834a9dcecae834cd6b2bc5e50e1907738d9cf6a (patch) | |
tree | 0589d753465d3fe359ba451ba6cb7798df03aaa2 /net/ipv4/tcp_ipv4.c | |
parent | a38c5380ef9f088be9f49b6e4c5d80af8b1b5cd4 (diff) | |
parent | f658bcfb2607bf0808966a69cf74135ce98e5c2d (diff) |
Merge branch 'x86/amd-nb' into x86/apic-cleanups
Reason: apic cleanup series depends on x86/apic, x86/amd-nb x86/platform
Conflicts:
arch/x86/include/asm/io_apic.h
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'net/ipv4/tcp_ipv4.c')
-rw-r--r-- | net/ipv4/tcp_ipv4.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 020766292bb0..69ccbc1dde9c 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
@@ -415,6 +415,9 @@ void tcp_v4_err(struct sk_buff *icmp_skb, u32 info) | |||
415 | !icsk->icsk_backoff) | 415 | !icsk->icsk_backoff) |
416 | break; | 416 | break; |
417 | 417 | ||
418 | if (sock_owned_by_user(sk)) | ||
419 | break; | ||
420 | |||
418 | icsk->icsk_backoff--; | 421 | icsk->icsk_backoff--; |
419 | inet_csk(sk)->icsk_rto = __tcp_set_rto(tp) << | 422 | inet_csk(sk)->icsk_rto = __tcp_set_rto(tp) << |
420 | icsk->icsk_backoff; | 423 | icsk->icsk_backoff; |
@@ -429,11 +432,6 @@ void tcp_v4_err(struct sk_buff *icmp_skb, u32 info) | |||
429 | if (remaining) { | 432 | if (remaining) { |
430 | inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS, | 433 | inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS, |
431 | remaining, TCP_RTO_MAX); | 434 | remaining, TCP_RTO_MAX); |
432 | } else if (sock_owned_by_user(sk)) { | ||
433 | /* RTO revert clocked out retransmission, | ||
434 | * but socket is locked. Will defer. */ | ||
435 | inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS, | ||
436 | HZ/20, TCP_RTO_MAX); | ||
437 | } else { | 435 | } else { |
438 | /* RTO revert clocked out retransmission. | 436 | /* RTO revert clocked out retransmission. |
439 | * Will retransmit now */ | 437 | * Will retransmit now */ |
@@ -1422,7 +1420,7 @@ struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
1422 | 1420 | ||
1423 | newsk = tcp_create_openreq_child(sk, req, skb); | 1421 | newsk = tcp_create_openreq_child(sk, req, skb); |
1424 | if (!newsk) | 1422 | if (!newsk) |
1425 | goto exit; | 1423 | goto exit_nonewsk; |
1426 | 1424 | ||
1427 | newsk->sk_gso_type = SKB_GSO_TCPV4; | 1425 | newsk->sk_gso_type = SKB_GSO_TCPV4; |
1428 | sk_setup_caps(newsk, dst); | 1426 | sk_setup_caps(newsk, dst); |
@@ -1469,16 +1467,20 @@ struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
1469 | } | 1467 | } |
1470 | #endif | 1468 | #endif |
1471 | 1469 | ||
1470 | if (__inet_inherit_port(sk, newsk) < 0) { | ||
1471 | sock_put(newsk); | ||
1472 | goto exit; | ||
1473 | } | ||
1472 | __inet_hash_nolisten(newsk, NULL); | 1474 | __inet_hash_nolisten(newsk, NULL); |
1473 | __inet_inherit_port(sk, newsk); | ||
1474 | 1475 | ||
1475 | return newsk; | 1476 | return newsk; |
1476 | 1477 | ||
1477 | exit_overflow: | 1478 | exit_overflow: |
1478 | NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS); | 1479 | NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS); |
1480 | exit_nonewsk: | ||
1481 | dst_release(dst); | ||
1479 | exit: | 1482 | exit: |
1480 | NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS); | 1483 | NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS); |
1481 | dst_release(dst); | ||
1482 | return NULL; | 1484 | return NULL; |
1483 | } | 1485 | } |
1484 | EXPORT_SYMBOL(tcp_v4_syn_recv_sock); | 1486 | EXPORT_SYMBOL(tcp_v4_syn_recv_sock); |
@@ -2571,7 +2573,6 @@ struct sk_buff **tcp4_gro_receive(struct sk_buff **head, struct sk_buff *skb) | |||
2571 | 2573 | ||
2572 | return tcp_gro_receive(head, skb); | 2574 | return tcp_gro_receive(head, skb); |
2573 | } | 2575 | } |
2574 | EXPORT_SYMBOL(tcp4_gro_receive); | ||
2575 | 2576 | ||
2576 | int tcp4_gro_complete(struct sk_buff *skb) | 2577 | int tcp4_gro_complete(struct sk_buff *skb) |
2577 | { | 2578 | { |
@@ -2584,7 +2585,6 @@ int tcp4_gro_complete(struct sk_buff *skb) | |||
2584 | 2585 | ||
2585 | return tcp_gro_complete(skb); | 2586 | return tcp_gro_complete(skb); |
2586 | } | 2587 | } |
2587 | EXPORT_SYMBOL(tcp4_gro_complete); | ||
2588 | 2588 | ||
2589 | struct proto tcp_prot = { | 2589 | struct proto tcp_prot = { |
2590 | .name = "TCP", | 2590 | .name = "TCP", |