From patchwork Mon Nov 17 05:01:36 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 411397 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 D697314009B for ; Mon, 17 Nov 2014 16:08:32 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750802AbaKQFBf (ORCPT ); Mon, 17 Nov 2014 00:01:35 -0500 Received: from mail-ie0-f176.google.com ([209.85.223.176]:63963 "EHLO mail-ie0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750718AbaKQFBe (ORCPT ); Mon, 17 Nov 2014 00:01:34 -0500 Received: by mail-ie0-f176.google.com with SMTP id rd18so20482091iec.7 for ; Sun, 16 Nov 2014 21:01:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:subject:from:to:cc:date:in-reply-to:references :content-type:mime-version:content-transfer-encoding; bh=xUJpV1C1D+h9tIezKAz9sbyvm3mn49VfqOU1vFdfqB8=; b=klTLGHYkBGUX2qKEtjfy8C72oZe24PDJN0++YVdv53aGj9Isi+njSjllt65cqG5HKK NWc7Eq4mV3Gf8AF0TKovmNc7a3ITgq/Z3L0o4Rp1YPnwO5BpIO4kWcnhmDghe95Zcvof sYpsiNU+VLSJwgWleyEX9/1mQSjEKcozoZjjvwNMPIWadnb5Q8gR1tL4NUM+s14pIAr7 0gQe7mQvTRoYzA2XlDgtcz9yv3E5N7rP66ggOeBhs3usA7jtGd7PDkHl14pqN+p8VKy6 AL9lRpIDlo1QVLmCTVH3u6JHJKd7Sle7gLaZkZMIL8jpEdw7ctAOkDcYo+myVEzfufXt l7tg== X-Received: by 10.42.79.76 with SMTP id q12mr5652564ick.16.1416200493528; Sun, 16 Nov 2014 21:01:33 -0800 (PST) Received: from [172.26.52.254] ([172.26.52.254]) by mx.google.com with ESMTPSA id 131sm18412548ioo.8.2014.11.16.21.01.32 for (version=TLSv1.2 cipher=AES128-GCM-SHA256 bits=128/128); Sun, 16 Nov 2014 21:01:32 -0800 (PST) Message-ID: <1416200496.24093.5.camel@edumazet-glaptop2.roam.corp.google.com> Subject: Re: /proc/net/sockstat invalid memory accounting or memory leak in latest kernels? (trying to debug) From: Eric Dumazet To: Denys Fedoryshchenko Cc: Neal Cardwell , Yuchung Cheng , netdev@vger.kernel.org Date: Sun, 16 Nov 2014 21:01:36 -0800 In-Reply-To: <1416168961.17262.96.camel@edumazet-glaptop2.roam.corp.google.com> References: <40bc2b5fcda47d790f1fd247bc409041@visp.net.lb> <1405597918.10255.76.camel@edumazet-glaptop2.roam.corp.google.com> <37e25a5815a18a2da507a5b20b58427d@visp.net.lb> <1405604568.10255.80.camel@edumazet-glaptop2.roam.corp.google.com> <1405672897.10255.95.camel@edumazet-glaptop2.roam.corp.google.com> <1405676214.10255.96.camel@edumazet-glaptop2.roam.corp.google.com> <0b0b74ab8d2222fa85b23e06c6e992ec@visp.net.lb> <1405849675.10255.100.camel@edumazet-glaptop2.roam.corp.google.com> <6fc086a122bc3ac728a7aec9e812310f@visp.net.lb> <1406016045.10255.122.camel@edumazet-glaptop2.roam.corp.google.com> <3f463c3912608f7959481edaa6d7668d@visp.net.lb> <1406194817.3363.70.camel@edumazet-glaptop2.roam.corp.google.com> <8f138d88e3b850130eb9bb15e3e27069@visp.net.lb> <2adbf5346b4dd2bebe1915096c1c567c@visp.net.lb> <1415813254.17262.7.camel@edumazet-glaptop2.roam.corp.google.com> <64ef227cf22945d373cb06271fe6e051@visp.net.lb> <1416161495.17262.90.camel@edumazet-glaptop2.roam.corp.google.com> <8d9b6a2c313db242c1afb3bcd6a12c51@visp.net.lb> <1416168961.17262.96.camel@edumazet-glaptop2.roam.corp.google.com> X-Mailer: Evolution 3.10.4-0ubuntu2 Mime-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On Sun, 2014-11-16 at 12:16 -0800, Eric Dumazet wrote: > Thanks Denys ! > > Could you try following patch ? > > Thanks ! Hmm.... I have an updated patch, sorry. (A memcpy_fromiovec() has to be memcpy_fromiovecend() ) --- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index a3d453b94747..c2bbfcd9c0db 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -2998,7 +2998,7 @@ static int tcp_send_syn_data(struct sock *sk, struct sk_buff *syn) { struct tcp_sock *tp = tcp_sk(sk); struct tcp_fastopen_request *fo = tp->fastopen_req; - int syn_loss = 0, space, i, err = 0, iovlen = fo->data->msg_iovlen; + int syn_loss = 0, space, err = 0; struct sk_buff *syn_data = NULL, *data; unsigned long last_syn_loss = 0; @@ -3031,25 +3031,19 @@ static int tcp_send_syn_data(struct sock *sk, struct sk_buff *syn) /* limit to order-0 allocations */ space = min_t(size_t, space, SKB_MAX_HEAD(MAX_TCP_HEADER)); - syn_data = skb_copy_expand(syn, MAX_TCP_HEADER, space, - sk->sk_allocation); - if (syn_data == NULL) + syn_data = sk_stream_alloc_skb(sk, space, sk->sk_allocation); + if (!syn_data) goto fallback; - for (i = 0; i < iovlen && syn_data->len < space; ++i) { - struct iovec *iov = &fo->data->msg_iov[i]; - unsigned char __user *from = iov->iov_base; - int len = iov->iov_len; - - if (syn_data->len + len > space) - len = space - syn_data->len; - else if (i + 1 == iovlen) - /* No more data pending in inet_wait_for_connect() */ - fo->data = NULL; + syn_data->ip_summed = CHECKSUM_PARTIAL; + memcpy(syn_data->cb, syn->cb, sizeof(syn->cb)); + if (memcpy_fromiovecend(skb_put(syn_data, space), + fo->data->msg_iov, 0, space)) + goto fallback; - if (skb_add_data(syn_data, from, len)) - goto fallback; - } + /* No more data pending in inet_wait_for_connect() */ + if (space == fo->size) + fo->data = NULL; /* Queue a data-only packet after the regular SYN for retransmission */ data = pskb_copy(syn_data, sk->sk_allocation); @@ -3101,13 +3095,10 @@ int tcp_connect(struct sock *sk) return 0; } - buff = alloc_skb_fclone(MAX_TCP_HEADER + 15, sk->sk_allocation); - if (unlikely(buff == NULL)) + buff = sk_stream_alloc_skb(sk, 0, sk->sk_allocation); + if (unlikely(!buff)) return -ENOBUFS; - /* Reserve space for headers. */ - skb_reserve(buff, MAX_TCP_HEADER); - tcp_init_nondata_skb(buff, tp->write_seq++, TCPHDR_SYN); tp->retrans_stamp = tcp_time_stamp; tcp_connect_queue_skb(sk, buff);