From patchwork Tue Apr 10 17:59:20 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neal Cardwell X-Patchwork-Id: 151679 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id E60A4B7014 for ; Wed, 11 Apr 2012 03:59:30 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756673Ab2DJR73 (ORCPT ); Tue, 10 Apr 2012 13:59:29 -0400 Received: from mail-yw0-f74.google.com ([209.85.213.74]:52320 "EHLO mail-yw0-f74.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753438Ab2DJR72 (ORCPT ); Tue, 10 Apr 2012 13:59:28 -0400 Received: by yhgm50 with SMTP id m50so9900yhg.1 for ; Tue, 10 Apr 2012 10:59:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer; bh=SYOP083AODsr0kKe6atbiPdgZ1t6hLtzW0g0sMfegnY=; b=XooRnfqOUwjhx6PR/ZO7MFYlnk9v4jBXXTxx60RwozOlUcpRW0Phr4yg47Vxd1MYy3 9fp2TkA1RadeoEIk5BueaMQ0TiBTV9vn0nMD0zlRSR8cox7lt4w7wDu8Vn90T7roNgUW MqULG5SpYGQmlLLN5tnKb7huWTsmsdEIolfCDot3nXRCoggkMZU8NGQ3shfkwn1vE/gp X06HkdHVRisv3puskfhTFLFYfxIcTrEqJ1v0C+ISGZzM4bq7SdVE6mEb7e68Q9QqesYD +3XB8Pp9IurcwnMIqPlsGOTDw12svalPeUpEpcsCiJfQ047rmiWuQRwAFU/pSkSqVZNJ SzeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:x-gm-message-state; bh=SYOP083AODsr0kKe6atbiPdgZ1t6hLtzW0g0sMfegnY=; b=nEfo03k6OidExVtQylBUQ+obQWqqYBOxsSo4+35Vcx8qIAfB29b9tyjRLWOC1mVXhR vpkdq0vnLdvX5DPEzPTnPhq69lW03OE9rwtYxlxq7wGibrsjr1txAn17nJmhot/fpcQ+ XJ2FJgN22ZQzQaKAXL1uDH1+6HIDZI19Sd4asIQZkbpnzzbq36jfa6RPO7qZBIBV3Dpy OZ7W4NKBkcHXq9u6HeMvUVVJWmh3FHunW+34/WgC5F1hrE6BjOmZA0LbfDNDff9xCC4k sC4+JeeOfRMxZVrCKbmrXGMGJtDhv+re3ItqUgIWvdk0ss2L/gyBT/anBAx7DILmRoSK 6Y4Q== Received: by 10.236.76.133 with SMTP id b5mr16007474yhe.0.1334080767743; Tue, 10 Apr 2012 10:59:27 -0700 (PDT) Received: by 10.236.76.133 with SMTP id b5mr16007447yhe.0.1334080767648; Tue, 10 Apr 2012 10:59:27 -0700 (PDT) Received: from wpzn3.hot.corp.google.com (216-239-44-65.google.com [216.239.44.65]) by gmr-mx.google.com with ESMTPS id k54si19179yhh.5.2012.04.10.10.59.27 (version=TLSv1/SSLv3 cipher=AES128-SHA); Tue, 10 Apr 2012 10:59:27 -0700 (PDT) Received: from coy.nyc.corp.google.com (coy.nyc.corp.google.com [172.26.62.101]) by wpzn3.hot.corp.google.com (Postfix) with ESMTP id 9288C10004D; Tue, 10 Apr 2012 10:59:27 -0700 (PDT) Received: by coy.nyc.corp.google.com (Postfix, from userid 4318) id 336771C0DB7; Tue, 10 Apr 2012 13:59:27 -0400 (EDT) From: Neal Cardwell To: David Miller Cc: netdev@vger.kernel.org, Nandita Dukkipati , Yuchung Cheng , Eric Dumazet , Tom Herbert , Neal Cardwell Subject: [PATCH] tcp: fix tcp_rcv_rtt_update() use of an unscaled RTT sample Date: Tue, 10 Apr 2012 13:59:20 -0400 Message-Id: <1334080760-968-1-git-send-email-ncardwell@google.com> X-Mailer: git-send-email 1.7.7.3 X-Gm-Message-State: ALoCoQkG+cQEuPpQ6kYi4HeEikb7smO9bFiZlmGQZdL/kd9uGRtGutk1salXt/0bJ4lpcH36Nz0KI9NT2ZitshoaE03Mjr6x1SHkgxv1KVc+33z2kMANTX7iFYBEf8xUaXQaZRtzKMoUoKYhO+Fdy9iPsV0E3D9rbP/XkCzCPG7+r+VzEBkgnc0= Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Fix a code path in tcp_rcv_rtt_update() that was comparing scaled and unscaled RTT samples. The intent in the code was to only use the 'm' measurement if it was a new minimum. However, since 'm' had not yet been shifted left 3 bits but 'new_sample' had, this comparison would nearly always succeed, leading us to erroneously set our receive-side RTT estimate to the 'm' sample when that sample could be nearly 8x too high to use. The overall effect is to often cause the receive-side RTT estimate to be significantly too large (up to 40% too large for brief periods in my tests). Signed-off-by: Neal Cardwell Acked-by: Eric Dumazet --- net/ipv4/tcp_input.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index e886e2f..e7b54d2 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -474,8 +474,11 @@ static void tcp_rcv_rtt_update(struct tcp_sock *tp, u32 sample, int win_dep) if (!win_dep) { m -= (new_sample >> 3); new_sample += m; - } else if (m < new_sample) - new_sample = m << 3; + } else { + m <<= 3; + if (m < new_sample) + new_sample = m; + } } else { /* No previous measure. */ new_sample = m << 3;