Messages in this thread | | | Subject | Re: a problem tcp_v4_err() | From | Eric Dumazet <> | Date | Fri, 12 Nov 2010 22:18:38 +0100 |
| |
Le vendredi 12 novembre 2010 à 11:22 -0800, David Miller a écrit : > From: Eric Dumazet <eric.dumazet@gmail.com> > Date: Fri, 12 Nov 2010 19:33:23 +0100 > > > I CC Damian Lukowski in my previous answer (and this one too) > > Probably the safest fix is this: > > diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c > index 8f8527d..69ccbc1 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) > !icsk->icsk_backoff) > break; > > + if (sock_owned_by_user(sk)) > + break; > + > icsk->icsk_backoff--; > inet_csk(sk)->icsk_rto = __tcp_set_rto(tp) << > icsk->icsk_backoff; > @@ -429,11 +432,6 @@ void tcp_v4_err(struct sk_buff *icmp_skb, u32 info) > if (remaining) { > inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS, > remaining, TCP_RTO_MAX); > - } else if (sock_owned_by_user(sk)) { > - /* RTO revert clocked out retransmission, > - * but socket is locked. Will defer. */ > - inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS, > - HZ/20, TCP_RTO_MAX); > } else { > /* RTO revert clocked out retransmission. > * Will retransmit now */
Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
-- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |