From patchwork Fri Jan 20 18:08:02 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Satoru Moriya X-Patchwork-Id: 137065 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 4574B1007D1 for ; Sat, 21 Jan 2012 05:08:21 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755925Ab2ATSIT (ORCPT ); Fri, 20 Jan 2012 13:08:19 -0500 Received: from usindpps03.hds.com ([207.126.252.16]:50812 "EHLO usindpps03.hds.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754914Ab2ATSIS convert rfc822-to-8bit (ORCPT ); Fri, 20 Jan 2012 13:08:18 -0500 Received: from usindmail02.hds.com (usindmail02 [207.126.252.21]) by usindpps03.hds.com (8.14.4/8.14.4) with ESMTP id q0KI83jl013339; Fri, 20 Jan 2012 13:08:03 -0500 Received: from USINDEHT03.corp.hds.com (usindnetf5-vlan4float.corp.hds.com [10.74.12.196]) by usindmail02.hds.com (8.14.1/8.14.1) with ESMTP id q0KI836l001545; Fri, 20 Jan 2012 13:08:03 -0500 (EST) Received: from USINDEVS02.corp.hds.com ([10.74.24.173]) by USINDEHT03.corp.hds.com ([10.74.67.146]) with mapi; Fri, 20 Jan 2012 13:08:03 -0500 From: Satoru Moriya To: "netdev@vger.kernel.org" CC: "davem@davemloft.net" , "nhorman@tuxdriver.com" , "tgraf@infradead.org" , Stephen Hemminger , Hagen Paul Pfeifer , "eric.dumazet@gmail.com" , Seiji Aguchi Date: Fri, 20 Jan 2012 13:08:02 -0500 Subject: [PATCH v2 1/2] tcp: refactor tcp_retransmit_skb() for a single return point Thread-Topic: [PATCH v2 1/2] tcp: refactor tcp_retransmit_skb() for a single return point Thread-Index: AczXnk+A31rFmSB8Q1WFITd03hiHPAAAAS0w Message-ID: <65795E11DBF1E645A09CEC7EAEE94B9CB728DD6A@USINDEVS02.corp.hds.com> References: <65795E11DBF1E645A09CEC7EAEE94B9CB728DD67@USINDEVS02.corp.hds.com> In-Reply-To: <65795E11DBF1E645A09CEC7EAEE94B9CB728DD67@USINDEVS02.corp.hds.com> Accept-Language: ja-JP, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: ja-JP, en-US MIME-Version: 1.0 X-Proofpoint-Spam-Details: rule=outbound_policy_notspam policy=outbound_policy score=0 spamscore=0 ipscore=0 suspectscore=1 phishscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=6.0.2-1012030000 definitions=main-1201200181 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This is just a cleanup patch for making easy to hook return value with a tracepoint. Signed-off-by: Satoru Moriya --- net/ipv4/tcp_output.c | 31 +++++++++++++++++++++---------- 1 files changed, 21 insertions(+), 10 deletions(-) diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 8c8de27..7bd23a8 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -2092,18 +2092,24 @@ int tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb) * copying overhead: fragmentation, tunneling, mangling etc. */ if (atomic_read(&sk->sk_wmem_alloc) > - min(sk->sk_wmem_queued + (sk->sk_wmem_queued >> 2), sk->sk_sndbuf)) - return -EAGAIN; + min(sk->sk_wmem_queued + (sk->sk_wmem_queued >> 2), sk->sk_sndbuf)) { + err = -EAGAIN; + goto out; + } if (before(TCP_SKB_CB(skb)->seq, tp->snd_una)) { if (before(TCP_SKB_CB(skb)->end_seq, tp->snd_una)) BUG(); - if (tcp_trim_head(sk, skb, tp->snd_una - TCP_SKB_CB(skb)->seq)) - return -ENOMEM; + if (tcp_trim_head(sk, skb, tp->snd_una - TCP_SKB_CB(skb)->seq)) { + err = -ENOMEM; + goto out; + } } - if (inet_csk(sk)->icsk_af_ops->rebuild_header(sk)) - return -EHOSTUNREACH; /* Routing failure or similar. */ + if (inet_csk(sk)->icsk_af_ops->rebuild_header(sk)) { + err = -EHOSTUNREACH; /* Routing failure or similar. */ + goto out; + } cur_mss = tcp_current_mss(sk); @@ -2113,12 +2119,16 @@ int tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb) * our retransmit serves as a zero window probe. */ if (!before(TCP_SKB_CB(skb)->seq, tcp_wnd_end(tp)) && - TCP_SKB_CB(skb)->seq != tp->snd_una) - return -EAGAIN; + TCP_SKB_CB(skb)->seq != tp->snd_una) { + err = -EAGAIN; + goto out; + } if (skb->len > cur_mss) { - if (tcp_fragment(sk, skb, cur_mss, cur_mss)) - return -ENOMEM; /* We'll try again later. */ + if (tcp_fragment(sk, skb, cur_mss, cur_mss)) { + err = -ENOMEM; /* We'll try again later. */ + goto out; + } } else { int oldpcount = tcp_skb_pcount(skb); @@ -2188,6 +2198,7 @@ int tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb) */ TCP_SKB_CB(skb)->ack_seq = tp->snd_nxt; } +out: return err; }