{"id":746,"url":"http://patchwork.ozlabs.org/api/1.0/patches/746/?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":"<1221947278-16715-11-git-send-email-ilpo.jarvinen@helsinki.fi>","date":"2008-09-20T21:47:53","name":"[PATCHv2,net-next,10/15] tcp: remove tp->lost_out guard to make joining diff nicer","commit_ref":null,"pull_url":null,"state":"accepted","archived":true,"hash":"69431defab55baa098d3d573bae87133f5e4fac5","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":{"id":34,"url":"http://patchwork.ozlabs.org/api/1.0/users/34/?format=json","username":"davem","first_name":"David","last_name":"Miller","email":"davem@davemloft.net"},"mbox":"http://patchwork.ozlabs.org/project/netdev/patch/1221947278-16715-11-git-send-email-ilpo.jarvinen@helsinki.fi/mbox/","series":[],"check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/746/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 8431DDDE31\n\tfor <patchwork-incoming@ozlabs.org>;\n\tSun, 21 Sep 2008 07:48:29 +1000 (EST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1753146AbYITVsU (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tSat, 20 Sep 2008 17:48:20 -0400","(majordomo@vger.kernel.org) by vger.kernel.org id S1752900AbYITVsT\n\t(ORCPT <rfc822; netdev-outgoing>); Sat, 20 Sep 2008 17:48:19 -0400","from courier.cs.helsinki.fi ([128.214.9.1]:36807 \"EHLO\n\tmail.cs.helsinki.fi\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751694AbYITVsF (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Sat, 20 Sep 2008 17:48:05 -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; Sun, 21 Sep 2008 00:47:59 +0300\n\tid 0005BEE9.48D56F8F.000052D7","by wrl-59.cs.helsinki.fi (Postfix, from userid 50795)\n\tid E352DA00AA; Sun, 21 Sep 2008 00:47:58 +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":"[PATCHv2 net-next 10/15] tcp: remove tp->lost_out guard to make\n\tjoining diff nicer","Date":"Sun, 21 Sep 2008 00:47:53 +0300","Message-Id":"<1221947278-16715-11-git-send-email-ilpo.jarvinen@helsinki.fi>","X-Mailer":"git-send-email 1.5.4.2.156.ge3c5","In-Reply-To":"<1221947278-16715-10-git-send-email-ilpo.jarvinen@helsinki.fi>","References":"<1221947278-16715-1-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221947278-16715-2-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221947278-16715-3-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221947278-16715-4-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221947278-16715-5-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221947278-16715-6-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221947278-16715-7-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221947278-16715-8-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221947278-16715-9-git-send-email-ilpo.jarvinen@helsinki.fi>\n\t<1221947278-16715-10-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":"The validity of the retransmit_high must then be ensured\nif no L'ed skb exits!\n\nThis makes a minor change to behavior, we now have to\niterate the head to find out that the loop terminates.\n\nSigned-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>\n---\n net/ipv4/tcp_output.c |   75 +++++++++++++++++++++++++------------------------\n 1 files changed, 38 insertions(+), 37 deletions(-)","diff":"diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c\nindex efe3c58..bee31ff 100644\n--- a/net/ipv4/tcp_output.c\n+++ b/net/ipv4/tcp_output.c\n@@ -2032,53 +2032,54 @@ void tcp_xmit_retransmit_queue(struct sock *sk)\n \tstruct sk_buff *skb;\n \tint mib_idx;\n \n+\tif (!tp->lost_out)\n+\t\ttp->retransmit_high = tp->snd_una;\n+\n \tif (tp->retransmit_skb_hint)\n \t\tskb = tp->retransmit_skb_hint;\n \telse\n \t\tskb = tcp_write_queue_head(sk);\n \n \t/* First pass: retransmit lost packets. */\n-\tif (tp->lost_out) {\n-\t\ttcp_for_write_queue_from(skb, sk) {\n-\t\t\t__u8 sacked = TCP_SKB_CB(skb)->sacked;\n+\ttcp_for_write_queue_from(skb, sk) {\n+\t\t__u8 sacked = TCP_SKB_CB(skb)->sacked;\n \n-\t\t\tif (skb == tcp_send_head(sk))\n-\t\t\t\tbreak;\n-\t\t\t/* we could do better than to assign each time */\n-\t\t\ttp->retransmit_skb_hint = skb;\n-\n-\t\t\t/* Assume this retransmit will generate\n-\t\t\t * only one packet for congestion window\n-\t\t\t * calculation purposes.  This works because\n-\t\t\t * tcp_retransmit_skb() will chop up the\n-\t\t\t * packet to be MSS sized and all the\n-\t\t\t * packet counting works out.\n-\t\t\t */\n-\t\t\tif (tcp_packets_in_flight(tp) >= tp->snd_cwnd)\n-\t\t\t\treturn;\n-\t\t\tif (!before(TCP_SKB_CB(skb)->seq, tp->retransmit_high))\n-\t\t\t\tbreak;\n-\t\t\tif (sacked & (TCPCB_SACKED_ACKED|TCPCB_SACKED_RETRANS))\n-\t\t\t\tcontinue;\n+\t\tif (skb == tcp_send_head(sk))\n+\t\t\tbreak;\n+\t\t/* we could do better than to assign each time */\n+\t\ttp->retransmit_skb_hint = skb;\n+\n+\t\t/* Assume this retransmit will generate\n+\t\t * only one packet for congestion window\n+\t\t * calculation purposes.  This works because\n+\t\t * tcp_retransmit_skb() will chop up the\n+\t\t * packet to be MSS sized and all the\n+\t\t * packet counting works out.\n+\t\t */\n+\t\tif (tcp_packets_in_flight(tp) >= tp->snd_cwnd)\n+\t\t\treturn;\n+\t\tif (!before(TCP_SKB_CB(skb)->seq, tp->retransmit_high))\n+\t\t\tbreak;\n+\t\tif (sacked & (TCPCB_SACKED_ACKED|TCPCB_SACKED_RETRANS))\n+\t\t\tcontinue;\n \n-\t\t\tif (!(sacked & TCPCB_LOST))\n-\t\t\t\tcontinue;\n+\t\tif (!(sacked & TCPCB_LOST))\n+\t\t\tcontinue;\n \n-\t\t\tif (tcp_retransmit_skb(sk, skb)) {\n-\t\t\t\ttp->retransmit_skb_hint = NULL;\n-\t\t\t\treturn;\n-\t\t\t}\n-\t\t\tif (icsk->icsk_ca_state != TCP_CA_Loss)\n-\t\t\t\tmib_idx = LINUX_MIB_TCPFASTRETRANS;\n-\t\t\telse\n-\t\t\t\tmib_idx = LINUX_MIB_TCPSLOWSTARTRETRANS;\n-\t\t\tNET_INC_STATS_BH(sock_net(sk), mib_idx);\n-\n-\t\t\tif (skb == tcp_write_queue_head(sk))\n-\t\t\t\tinet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,\n-\t\t\t\t\t\t\t  inet_csk(sk)->icsk_rto,\n-\t\t\t\t\t\t\t  TCP_RTO_MAX);\n+\t\tif (tcp_retransmit_skb(sk, skb)) {\n+\t\t\ttp->retransmit_skb_hint = NULL;\n+\t\t\treturn;\n \t\t}\n+\t\tif (icsk->icsk_ca_state != TCP_CA_Loss)\n+\t\t\tmib_idx = LINUX_MIB_TCPFASTRETRANS;\n+\t\telse\n+\t\t\tmib_idx = LINUX_MIB_TCPSLOWSTARTRETRANS;\n+\t\tNET_INC_STATS_BH(sock_net(sk), mib_idx);\n+\n+\t\tif (skb == tcp_write_queue_head(sk))\n+\t\t\tinet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,\n+\t\t\t\t\t\t  inet_csk(sk)->icsk_rto,\n+\t\t\t\t\t\t  TCP_RTO_MAX);\n \t}\n \n \t/* OK, demanded retransmission is finished. */\n","prefixes":["PATCHv2","net-next","10/15"]}