{"id":731,"url":"http://patchwork.ozlabs.org/api/1.0/patches/731/?format=json","project":{"id":7,"url":"http://patchwork.ozlabs.org/api/1.0/projects/7/?format=json","name":"Linux network development","link_name":"netdev","list_id":"netdev.vger.kernel.org","list_email":"netdev@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null},"msgid":"<1221933153-11874-14-git-send-email-ilpo.jarvinen@helsinki.fi>","date":"2008-09-20T17:52:31","name":"[net-next,13/15] tcp: don't clear retransmit_skb_hint when not necessary","commit_ref":null,"pull_url":null,"state":"rejected","archived":true,"hash":"2ba2c012c70f2eb5e681c81127416c12fd1144f9","submitter":{"id":255,"url":"http://patchwork.ozlabs.org/api/1.0/people/255/?format=json","name":"Ilpo Järvinen","email":"ilpo.jarvinen@helsinki.fi"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/netdev/patch/1221933153-11874-14-git-send-email-ilpo.jarvinen@helsinki.fi/mbox/","series":[],"check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/731/checks/","tags":{},"headers":{"Return-Path":"<netdev-owner@vger.kernel.org>","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])\n\tby ozlabs.org (Postfix) with ESMTP id 5639FDDEE7\n\tfor <patchwork-incoming@ozlabs.org>;\n\tSun, 21 Sep 2008 03:53:13 +1000 (EST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751498AbYITRw5 (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tSat, 20 Sep 2008 13:52:57 -0400","(majordomo@vger.kernel.org) by vger.kernel.org id S1751313AbYITRwz\n\t(ORCPT <rfc822; netdev-outgoing>); Sat, 20 Sep 2008 13:52:55 -0400","from courier.cs.helsinki.fi ([128.214.9.1]:49080 \"EHLO\n\tmail.cs.helsinki.fi\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751040AbYITRwj (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Sat, 20 Sep 2008 13:52:39 -0400","from wrl-59.cs.helsinki.fi (wrl-59.cs.helsinki.fi\n\t[128.214.166.179])\n\t(AUTH: PLAIN cs-relay, TLS: TLSv1/SSLv3,256bits,AES256-SHA)\n\tby mail.cs.helsinki.fi with esmtp; Sat, 20 Sep 2008 20:52:34 +0300\n\tid 0005BEE2.48D53862.00002DB9","by wrl-59.cs.helsinki.fi (Postfix, from userid 50795)\n\tid A51E4A00A3; Sat, 20 Sep 2008 20:52:34 +0300 (EEST)"],"From":"\"=?ISO-8859-1?Q?Ilpo_J=E4rvinen?=\" <ilpo.jarvinen@helsinki.fi>","To":"David Miller <davem@davemloft.net>","Cc":"netdev@vger.kernel.org,\n\t\"=?utf-8?q?Ilpo=20J=E4rvinen?=\" <ilpo.jarvinen@helsinki.fi>","Subject":"[PATCH net-next 13/15] tcp: don't clear retransmit_skb_hint when\n\tnot necessary","Date":"Sat, 20 Sep 2008 20:52:31 +0300","Message-Id":"<1221933153-11874-14-git-send-email-ilpo.jarvinen@helsinki.fi>","X-Mailer":"git-send-email 1.5.4.2.156.ge3c5","In-Reply-To":"<1221933153-11874-13-git-send-email-ilpo.jarvinen@helsinki.fi>","References":"<1221933153-11874-1-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221933153-11874-2-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221933153-11874-3-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221933153-11874-4-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221933153-11874-5-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221933153-11874-6-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221933153-11874-7-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221933153-11874-8-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221933153-11874-9-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221933153-11874-10-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221933153-11874-11-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221933153-11874-12-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221933153-11874-13-git-send-email-ilpo.jarvinen@helsinki.fi>","MIME-Version":"1.0","Content-Type":"text/plain; charset=ISO-8859-1","Content-Transfer-Encoding":"8bit","Sender":"netdev-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<netdev.vger.kernel.org>","X-Mailing-List":"netdev@vger.kernel.org"},"content":"Most importantly avoid doing it with cumulative ACK. Not clearing\nmeans that we no longer need n^2 processing in resolution of each\nfast recovery.\n\nSigned-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>\n---\n include/net/tcp.h     |    7 ++++++-\n net/ipv4/tcp_input.c  |    4 +++-\n net/ipv4/tcp_output.c |    8 +++++---\n 3 files changed, 14 insertions(+), 5 deletions(-)","diff":"diff --git a/include/net/tcp.h b/include/net/tcp.h\nindex 10f838e..2d6b140 100644\n--- a/include/net/tcp.h\n+++ b/include/net/tcp.h\n@@ -1036,10 +1036,15 @@ static inline void tcp_mib_init(struct net *net)\n }\n \n /* from STCP */\n-static inline void tcp_clear_all_retrans_hints(struct tcp_sock *tp)\n+static inline void tcp_clear_retrans_hints_partial(struct tcp_sock *tp)\n {\n \ttp->lost_skb_hint = NULL;\n \ttp->scoreboard_skb_hint = NULL;\n+}\n+\n+static inline void tcp_clear_all_retrans_hints(struct tcp_sock *tp)\n+{\n+\ttcp_clear_retrans_hints_partial(tp);\n \ttp->retransmit_skb_hint = NULL;\n }\n \ndiff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c\nindex 8a6dec8..f217b4f 100644\n--- a/net/ipv4/tcp_input.c\n+++ b/net/ipv4/tcp_input.c\n@@ -2925,7 +2925,9 @@ static int tcp_clean_rtx_queue(struct sock *sk, int prior_fackets)\n \n \t\ttcp_unlink_write_queue(skb, sk);\n \t\tsk_wmem_free_skb(sk, skb);\n-\t\ttcp_clear_all_retrans_hints(tp);\n+\t\ttcp_clear_retrans_hints_partial(tp);\n+\t\tif (skb == tp->retransmit_skb_hint)\n+\t\t\ttp->retransmit_skb_hint = NULL;\n \t}\n \n \tif (skb && (TCP_SKB_CB(skb)->sacked & TCPCB_SACKED_ACKED))\ndiff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c\nindex 63686bf..01fb610 100644\n--- a/net/ipv4/tcp_output.c\n+++ b/net/ipv4/tcp_output.c\n@@ -748,7 +748,7 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len,\n \n \tBUG_ON(len > skb->len);\n \n-\ttcp_clear_all_retrans_hints(tp);\n+\ttcp_clear_retrans_hints_partial(tp);\n \tnsize = skb_headlen(skb) - len;\n \tif (nsize < 0)\n \t\tnsize = 0;\n@@ -1821,7 +1821,9 @@ static void tcp_retrans_try_collapse(struct sock *sk, struct sk_buff *skb,\n \ttp->packets_out -= tcp_skb_pcount(next_skb);\n \n \t/* changed transmit queue under us so clear hints */\n-\ttcp_clear_all_retrans_hints(tp);\n+\ttcp_clear_retrans_hints_partial(tp);\n+\tif (next_skb == tp->retransmit_skb_hint)\n+\t\ttp->retransmit_skb_hint = skb;\n \n \tsk_wmem_free_skb(sk, next_skb);\n }\n@@ -1855,7 +1857,7 @@ void tcp_simple_retransmit(struct sock *sk)\n \t\t}\n \t}\n \n-\ttcp_clear_all_retrans_hints(tp);\n+\ttcp_clear_retrans_hints_partial(tp);\n \n \tif (!lost)\n \t\treturn;\n","prefixes":["net-next","13/15"]}