From patchwork Wed Nov 12 08:58:18 2008 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Douglas Leith X-Patchwork-Id: 8341 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.176.167]) by ozlabs.org (Postfix) with ESMTP id 900BFDDDE0 for ; Wed, 12 Nov 2008 19:58:18 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751479AbYKLI6O (ORCPT ); Wed, 12 Nov 2008 03:58:14 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751368AbYKLI6N (ORCPT ); Wed, 12 Nov 2008 03:58:13 -0500 Received: from banyan.nuim.ie ([149.157.1.4]:48897 "EHLO banyan.nuim.ie" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751293AbYKLI6N (ORCPT ); Wed, 12 Nov 2008 03:58:13 -0500 MIME-version: 1.0 Content-type: multipart/mixed; boundary="Boundary_(ID_e0pRC7Y2iqQyGRbrIiFbBw)" Received: from [10.220.3.214] ([149.157.192.252]) by mango.nuim.ie (Sun Java(tm) System Messaging Server 6.3-4.01 (built Aug 3 2007; 32bit)) with ESMTPSA id <0KA7002YLQ8ZN770@mango.nuim.ie> for netdev@vger.kernel.org; Wed, 12 Nov 2008 08:58:11 +0000 (GMT) In-reply-to: References: <0E5A87BC-8FA8-40A5-8032-9FA18D07D7CE@nuim.ie> <20081110.215033.22437445.davem@davemloft.net> Message-id: <63599554-7243-4E44-BFEF-5B4B36743606@nuim.ie> Cc: Netdev , Stephen Hemminger From: Douglas Leith Subject: Re: [PATCH 2.6.27] tcp_htcp: last_cong bug fix Date: Wed, 12 Nov 2008 08:58:18 +0000 To: David Miller X-Mailer: Apple Mail (2.753.1) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch fixes a minor bug in tcp_htcp.c which has been highlighted by Lachlan Andrew and Lawrence Stewart. Currently, the time since the last congestion event, which is stored in variable last_cong, is reset whenever there is a state change into TCP_CA_Open. This includes transitions of the type TCP_CA_Open->TCP_CA_Disorder->TCP_CA_Open which are not associated with backoff of cwnd. The patch changes last_cong to be updated only on transitions into TCP_CA_Open that occur after experiencing the congestion-related states TCP_CA_Loss, TCP_CA_Recovery, TCP_CA_CWR. Signed-off-by: Doug Leith --- Resending with patch as attachment. Hope this does the trick. --- net/ipv4/tcp_htcp.c 2008-11-05 15:50:18.000000000 +0000 +++ net/ipv4/tcp_htcp.c.new 2008-11-11 15:20:31.000000000 +0000 @@ -71,5 +71,8 @@ static u32 htcp_cwnd_undo(struct sock *s - ca->last_cong = ca->undo_last_cong; - ca->maxRTT = ca->undo_maxRTT; - ca->old_maxB = ca->undo_old_maxB; + if (ca->undo_last_cong) { + ca->last_cong = ca->undo_last_cong; + ca->maxRTT = ca->undo_maxRTT; + ca->old_maxB = ca->undo_old_maxB; + ca->undo_last_cong = 0; + } @@ -267,8 +270,11 @@ static void htcp_state(struct sock *sk, switch (new_state) { - case TCP_CA_Open: + case TCP_CA_Open: { struct htcp *ca = inet_csk_ca(sk); - ca->last_cong = jiffies; + if (ca->undo_last_cong) { + ca->last_cong = jiffies; + ca->undo_last_cong = 0; + } } - break; + break; case TCP_CA_CWR: