From: Damian Lukowski <damian@tvk.rwth-aachen.de>
To: Netdev <netdev@vger.kernel.org>
Cc: "David Miller" <davem@davemloft.net>,
"Ilpo Järvinen" <ilpo.jarvinen@helsinki.fi>
Subject: [PATCH][v4] tcp: fix ICMP-RTO war
Date: Wed, 10 Feb 2010 20:06:42 +0100 [thread overview]
Message-ID: <4B7303C2.5000703@tvk.rwth-aachen.de> (raw)
Make sure, that TCP has a nonzero RTT estimation after three-way
handshake. Currently, a listening TCP has a value of 0 for srtt,
rttvar and rto right after the three-way handshake is completed
with TCP timestamps disabled.
This will lead to corrupt RTO recalculation and retransmission
flood when RTO is recalculated on backoff reversion as introduced
in "Revert RTO on ICMP destination unreachable"
(f1ecd5d9e7366609d640ff4040304ea197fbc618).
This behaviour can be provoked by connecting to a server which
"responds first" (like SMTP) and rejecting every packet after
the handshake with dest-unreachable, which will lead to softirq
load on the server (up to 30% per socket in some tests).
Thanks to Ilpo Jarvinen for providing debug patches and to
Denys Fedoryshchenko for reporting and testing.
Changes since v3: Removed bad characters in patchfile.
Reported-by: Denys Fedoryshchenko <denys@visp.net.lb>
Signed-off-by: Damian Lukowski <damian@tvk.rwth-aachen.de>
---
net/ipv4/tcp_input.c | 8 +++-----
1 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 28e0296..da7173b 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -5783,12 +5783,10 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
/* tcp_ack considers this ACK as duplicate
* and does not calculate rtt.
- * Fix it at least with timestamps.
+ * Force it here.
*/
- if (tp->rx_opt.saw_tstamp &&
- tp->rx_opt.rcv_tsecr && !tp->srtt)
- tcp_ack_saw_tstamp(sk, 0);
-
+ tcp_ack_update_rtt(sk, 0, 0);
+
if (tp->rx_opt.tstamp_ok)
tp->advmss -= TCPOLEN_TSTAMP_ALIGNED;
-- 1.6.4.4
next reply other threads:[~2010-02-10 19:06 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-10 19:06 Damian Lukowski [this message]
2010-02-10 19:08 ` [PATCH][v4] tcp: fix ICMP-RTO war David Miller
2010-02-11 2:04 ` David Miller
2010-02-16 12:45 ` Ilpo Järvinen
2010-02-22 2:10 ` David Miller
[not found] ` <o2z349f35ee1005071622z38fcd66ek398402d7512542ae@mail.gmail.com>
2010-05-07 23:25 ` Jerry Chu
2010-05-08 8:30 ` Damian Lukowski
2010-05-08 17:27 ` Jerry Chu
2010-05-08 22:00 ` Ilpo Järvinen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4B7303C2.5000703@tvk.rwth-aachen.de \
--to=damian@tvk.rwth-aachen.de \
--cc=davem@davemloft.net \
--cc=ilpo.jarvinen@helsinki.fi \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).