Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp28629imu; Thu, 8 Nov 2018 14:09:58 -0800 (PST) X-Google-Smtp-Source: AJdET5fJFM5iP2Yoq9RwTfNkNXfqDrFFNE/Scto2QsuMvMjva6j4/3zpxZyVerdey7uNHSvwqTKV X-Received: by 2002:a63:a41:: with SMTP id z1mr5251410pgk.117.1541714998134; Thu, 08 Nov 2018 14:09:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1541714998; cv=none; d=google.com; s=arc-20160816; b=jAIAB5FQysG/muTN2u45tcaMGuxBK4Id2gUCcMpsPE+Sb4aoIsSY5wG42wVK/pGheB 0CMBA4+mZrC1bEdke3SrBE3GLEGBlhnT/Lnwh/Y3TGLxQyWtiCK5Nr5okxbVcAey+AKE H+1AN7NPx+eKdULYRp5deG89+UeW/bdFUN7dhOHUGjzRfnC4QBoGaFgW492uTi9ZpJKN yFUzUwJbFgEJ+34grN8yZcbeUX46ErxKEfT4e6gdp/RczI/7X9/9L9egPXreXj8Q3Z4a lOpahWXc58f05adjh9SnT156lrDyhQkQzZVV2CLCHrIPSwTqTPAyAG/ZbAAh6nW4ZnnQ A8/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=BywmoNCJk7dpBdWGU3aw3nylv8BkWRfcMbWolRUoHE8=; b=Eayz72C1IPQcOQMfcxTVbMsFUUwpFwtb/LNMMmDv3aFxsR+zPU6W4x6WA2esufNzUj Fck9mD9i0t6xZHE5oxa3KVNrZEXw6mDRV4ZbF16vziERMXtw4C5kkvgiikOppPACuPAW 6G9rk9nTkI1FNl8IcjVzLWoENrMHr0oHf5TB2JmxA16+Gr6iL64opC3S9wEohZYbzm50 +H/30ecPb/I121OSQfy6E7pocl0PH0y9s/As//5xCc5v069BCVqmHZ/LV2h5G6Cd1Iq3 HISKn+9S/VONE7e76izVfhXwyRb+/tKLdK8m/5+KZz2afOv3+Uj2gXft/NliXOf+tKVb j3JQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=yuAbuIZP; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g11-v6si5223023plp.128.2018.11.08.14.09.35; Thu, 08 Nov 2018 14:09:58 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=yuAbuIZP; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731981AbeKIHoA (ORCPT + 99 others); Fri, 9 Nov 2018 02:44:00 -0500 Received: from mail.kernel.org ([198.145.29.99]:36722 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730680AbeKIHn7 (ORCPT ); Fri, 9 Nov 2018 02:43:59 -0500 Received: from localhost (unknown [208.72.13.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 8003B20892; Thu, 8 Nov 2018 22:06:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1541714788; bh=iw4JaW7zzl0tyGusNrAVdvT4ByCjZ/BzrZK6v2FCkgA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=yuAbuIZPADQUApNNilUZEiuWThcEYMZDXiBS4CbnCN9OReC2UxCVV7qamTnniDQ35 Mt7x8mBe6KWqkPvmrMNQ/6Y/iskpznhUvciO1SYPIdCqCWUb5lYYDLp3cPK4zITJNF 7JLdITA/2b4v48iz0SYUv4UhsRJIThW/5wmEk6ro= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, David Howells , Sasha Levin Subject: [PATCH 4.9 127/171] rxrpc: Dont check RXRPC_CALL_TX_LAST after calling rxrpc_rotate_tx_window() Date: Thu, 8 Nov 2018 13:51:37 -0800 Message-Id: <20181108215136.442405962@linuxfoundation.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181108215127.257643509@linuxfoundation.org> References: <20181108215127.257643509@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.9-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit c479d5f2c2e1ce609da08c075054440d97ddff52 ] We should only call the function to end a call's Tx phase if we rotated the marked-last packet out of the transmission buffer. Make rxrpc_rotate_tx_window() return an indication of whether it just rotated the packet marked as the last out of the transmit buffer, carrying the information out of the locked section in that function. We can then check the return value instead of examining RXRPC_CALL_TX_LAST. Fixes: 70790dbe3f66 ("rxrpc: Pass the last Tx packet marker in the annotation buffer") Signed-off-by: David Howells Signed-off-by: Sasha Levin --- net/rxrpc/input.c | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/net/rxrpc/input.c b/net/rxrpc/input.c index f3ac85a285a2..7bfde4737cb3 100644 --- a/net/rxrpc/input.c +++ b/net/rxrpc/input.c @@ -216,10 +216,11 @@ static void rxrpc_send_ping(struct rxrpc_call *call, struct sk_buff *skb, /* * Apply a hard ACK by advancing the Tx window. */ -static void rxrpc_rotate_tx_window(struct rxrpc_call *call, rxrpc_seq_t to, +static bool rxrpc_rotate_tx_window(struct rxrpc_call *call, rxrpc_seq_t to, struct rxrpc_ack_summary *summary) { struct sk_buff *skb, *list = NULL; + bool rot_last = false; int ix; u8 annotation; @@ -243,15 +244,17 @@ static void rxrpc_rotate_tx_window(struct rxrpc_call *call, rxrpc_seq_t to, skb->next = list; list = skb; - if (annotation & RXRPC_TX_ANNO_LAST) + if (annotation & RXRPC_TX_ANNO_LAST) { set_bit(RXRPC_CALL_TX_LAST, &call->flags); + rot_last = true; + } if ((annotation & RXRPC_TX_ANNO_MASK) != RXRPC_TX_ANNO_ACK) summary->nr_rot_new_acks++; } spin_unlock(&call->lock); - trace_rxrpc_transmit(call, (test_bit(RXRPC_CALL_TX_LAST, &call->flags) ? + trace_rxrpc_transmit(call, (rot_last ? rxrpc_transmit_rotate_last : rxrpc_transmit_rotate)); wake_up(&call->waitq); @@ -262,6 +265,8 @@ static void rxrpc_rotate_tx_window(struct rxrpc_call *call, rxrpc_seq_t to, skb->next = NULL; rxrpc_free_skb(skb, rxrpc_skb_tx_freed); } + + return rot_last; } /* @@ -332,11 +337,11 @@ static bool rxrpc_receiving_reply(struct rxrpc_call *call) ktime_get_real()); } - if (!test_bit(RXRPC_CALL_TX_LAST, &call->flags)) - rxrpc_rotate_tx_window(call, top, &summary); if (!test_bit(RXRPC_CALL_TX_LAST, &call->flags)) { - rxrpc_proto_abort("TXL", call, top); - return false; + if (!rxrpc_rotate_tx_window(call, top, &summary)) { + rxrpc_proto_abort("TXL", call, top); + return false; + } } if (!rxrpc_end_tx_phase(call, true, "ETD")) return false; @@ -839,8 +844,12 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb, if (nr_acks > call->tx_top - hard_ack) return rxrpc_proto_abort("AKN", call, 0); - if (after(hard_ack, call->tx_hard_ack)) - rxrpc_rotate_tx_window(call, hard_ack, &summary); + if (after(hard_ack, call->tx_hard_ack)) { + if (rxrpc_rotate_tx_window(call, hard_ack, &summary)) { + rxrpc_end_tx_phase(call, false, "ETA"); + return; + } + } if (nr_acks > 0) { if (skb_copy_bits(skb, offset, buf.acks, nr_acks) < 0) @@ -849,11 +858,6 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb, &summary); } - if (test_bit(RXRPC_CALL_TX_LAST, &call->flags)) { - rxrpc_end_tx_phase(call, false, "ETA"); - return; - } - if (call->rxtx_annotations[call->tx_top & RXRPC_RXTX_BUFF_MASK] & RXRPC_TX_ANNO_LAST && summary.nr_acks == call->tx_top - hard_ack && @@ -875,8 +879,7 @@ static void rxrpc_input_ackall(struct rxrpc_call *call, struct sk_buff *skb) _proto("Rx ACKALL %%%u", sp->hdr.serial); - rxrpc_rotate_tx_window(call, call->tx_top, &summary); - if (test_bit(RXRPC_CALL_TX_LAST, &call->flags)) + if (rxrpc_rotate_tx_window(call, call->tx_top, &summary)) rxrpc_end_tx_phase(call, false, "ETL"); } -- 2.17.1