Received: by 10.223.185.111 with SMTP id b44csp908411wrg; Fri, 9 Mar 2018 16:34:55 -0800 (PST) X-Google-Smtp-Source: AG47ELtBSFjJYfbO4rvUv5fBI4t5kJfA2QZJb9W8mkv2o0JdWN/GrNQPBu00DdpsA0fh+6Y+FMbq X-Received: by 2002:a17:902:7142:: with SMTP id u2-v6mr334682plm.257.1520642095019; Fri, 09 Mar 2018 16:34:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520642094; cv=none; d=google.com; s=arc-20160816; b=sQv/oN2RqXnhSdmpOL+MP7YgM8qbBuwx16MkIDcnmIS71FqfnKVN1acApyud3GCB8p b5t/jWxmaoF9qPzMGDVRK8PTyEvoxoPn+8y+SJ2VcsCRmemkK4S7zV1FIPatU2soI8+o D83bp80VDWxlB9zhHgPge2DDHyxsC1GLbcj7oY22MUIeF5Ci3TMtDR9FmmRkUQoyNRrA WFsXxn5hx2C7z6QTQZiK/u6sVvt2AL8AJ6ARgcoPXnZdJAiWzKfvBevktrZpqGHPH4EJ hDrNwyZgkVB0L9Ld7kBhRrcxijTvmiV3ytuloq81WV8neFqS555jAloNkqoa+YfnsRsp RlqQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=k0ggsUCzlruSUc+IMO7CIIPVO74LG231s8RrMnw51LA=; b=FrujGy6zIA5MHxwu/uDkdn9TOPq9TDuDQBHPtuvtUgX0yqBxVBbVjTGg+qo9ahoEar QQu3QENf8tB0yuzgXU7Iu2AVpP+qZ+zxIyMaGEDab/z9P6mATAqwFAveTk9nehRyYhzT HHvMRh6iltnXbNbHsEDGmk4X9yKGYlF0V2yr0GrqqEX1gvDAKjDGOlk92J6PPzRpTa6f SC65A/UPUjBNwEz708l6sdf4++gS7jvp7+KYklY6OLLN2KFXVnNtWm0np2bSzxVYpLF7 63PP8csoFTUFb1T97UGinA1iKEzJcjSnAO0ckHp5BZV7Pou+ERb1TQRab94U7VCc8yPL Wtww== ARC-Authentication-Results: i=1; mx.google.com; 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 w9si1510896pgo.82.2018.03.09.16.34.40; Fri, 09 Mar 2018 16:34:54 -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; 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 S933853AbeCJAWR (ORCPT + 99 others); Fri, 9 Mar 2018 19:22:17 -0500 Received: from mail.linuxfoundation.org ([140.211.169.12]:39934 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751791AbeCJAWP (ORCPT ); Fri, 9 Mar 2018 19:22:15 -0500 Received: from localhost (unknown [185.236.200.248]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 1EEA9FE0; Sat, 10 Mar 2018 00:22:15 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Ilya Lesokhin , "David S. Miller" Subject: [PATCH 4.9 45/65] tcp: Honor the eor bit in tcp_mtu_probe Date: Fri, 9 Mar 2018 16:18:45 -0800 Message-Id: <20180310001828.552511501@linuxfoundation.org> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180310001824.927996722@linuxfoundation.org> References: <20180310001824.927996722@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 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. ------------------ From: Ilya Lesokhin [ Upstream commit 808cf9e38cd7923036a99f459ccc8cf2955e47af ] Avoid SKB coalescing if eor bit is set in one of the relevant SKBs. Fixes: c134ecb87817 ("tcp: Make use of MSG_EOR in tcp_sendmsg") Signed-off-by: Ilya Lesokhin Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- net/ipv4/tcp_output.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -1907,6 +1907,24 @@ static inline void tcp_mtu_check_reprobe } } +static bool tcp_can_coalesce_send_queue_head(struct sock *sk, int len) +{ + struct sk_buff *skb, *next; + + skb = tcp_send_head(sk); + tcp_for_write_queue_from_safe(skb, next, sk) { + if (len <= skb->len) + break; + + if (unlikely(TCP_SKB_CB(skb)->eor)) + return false; + + len -= skb->len; + } + + return true; +} + /* Create a new MTU probe if we are ready. * MTU probe is regularly attempting to increase the path MTU by * deliberately sending larger packets. This discovers routing @@ -1979,6 +1997,9 @@ static int tcp_mtu_probe(struct sock *sk return 0; } + if (!tcp_can_coalesce_send_queue_head(sk, probe_size)) + return -1; + /* We're allowed to probe. Build it now. */ nskb = sk_stream_alloc_skb(sk, probe_size, GFP_ATOMIC, false); if (!nskb) @@ -2014,6 +2035,10 @@ static int tcp_mtu_probe(struct sock *sk /* We've eaten all the data from this skb. * Throw it away. */ TCP_SKB_CB(nskb)->tcp_flags |= TCP_SKB_CB(skb)->tcp_flags; + /* If this is the last SKB we copy and eor is set + * we need to propagate it to the new skb. + */ + TCP_SKB_CB(nskb)->eor = TCP_SKB_CB(skb)->eor; tcp_unlink_write_queue(skb, sk); sk_wmem_free_skb(sk, skb); } else {