From patchwork Fri May 15 19:39:29 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 472918 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 562081400A0 for ; Sat, 16 May 2015 05:40:52 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b=gwKsQ2+e; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934598AbbEOTks (ORCPT ); Fri, 15 May 2015 15:40:48 -0400 Received: from mail-vn0-f74.google.com ([209.85.216.74]:33239 "EHLO mail-vn0-f74.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934138AbbEOTkq (ORCPT ); Fri, 15 May 2015 15:40:46 -0400 X-Greylist: delayed 17201 seconds by postgrey-1.27 at vger.kernel.org; Fri, 15 May 2015 15:40:46 EDT Received: by vnbg1 with SMTP id g1so1788566vnb.0 for ; Fri, 15 May 2015 12:40:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=a7JrFQgDykppig4ucocTDULOA62TJJxkVKcei8xUykQ=; b=gwKsQ2+ejz7g6XaP4Q1qsz8YykQfEJhhGvk4URfA31ezChwHy3duop0LY+ycLWlcOE 95UKlPnIPddFfC+zRtVOVlzHPogP+H6LcVR3PczCMwM0Sum/h76mu11myCpUcCcjlLYo 1UQ7C8PHwPWcFpmLkmFPVqeHkmeTtfeRtz9qG12BgGrYQJA/GjuwhUvkGnVOmPlY+zsf 2T6zgPjr7lpuau3SbU3xiMgl1N2KaeAyQulMAgt3oolteRygxWqA0PR+YPYq7JpNIBcy oEoye+Rwjr/DHzPa/04keBA2ZTlC9OnH65Kk8KTHRQXqbCxuEV3iGahmVgabVDem5+u3 qiCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=a7JrFQgDykppig4ucocTDULOA62TJJxkVKcei8xUykQ=; b=jZDMwigMapUl9XLZOzfQG5GoxnVV6S8dYJKL/ZMyBcMa2MlW0+y1LH3So2LcvJB5Fz 3GxkElIwfvI0X6PszdL6YoqMrgfKEGlgsRvn1Z7PqJy6Y5L2NDKc9oADZZgpx8hUARPR qlbRhZKxc0xWShpWNLEiZAm/b7/k3NJxYP5/El+9WxfXfavrvADrRSWF01vNReX+jw/R b6PSKi32itZuHOrepa2P+QTirvmgjMZGIJBcNPlA5grkx08GY2NbPNQroW4v5gnHP0J/ YeoE5ZmGi3jBy/8Ytz0MB/yJxXbVbCHywf6TF+eKrAbeQ0U0YVh56stt4gqQ/kFxqZkK yC6w== X-Gm-Message-State: ALoCoQmOf63eZhUDLzwucK3JyZLVZasGJIvtvEM+13HY2mGqVZ+Lge5Zl/2zZDyWUuVzW6AfrAkl X-Received: by 10.236.43.146 with SMTP id l18mr16586994yhb.55.1431718845960; Fri, 15 May 2015 12:40:45 -0700 (PDT) Received: from corpmail-nozzle1-1.hot.corp.google.com ([100.108.1.104]) by gmr-mx.google.com with ESMTPS id v17si123957yhc.0.2015.05.15.12.40.45 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 May 2015 12:40:45 -0700 (PDT) Received: from manihi.mtv.corp.google.com ([172.17.131.143]) by corpmail-nozzle1-1.hot.corp.google.com with ESMTP id ueREZxs3.1; Fri, 15 May 2015 12:40:45 -0700 Received: by manihi.mtv.corp.google.com (Postfix, from userid 160623) id 21B01A0849; Fri, 15 May 2015 12:40:45 -0700 (PDT) From: Eric Dumazet To: "David S. Miller" Cc: netdev , Jason Baron , Neal Cardwell , Yuchung Cheng , Eric Dumazet , Eric Dumazet Subject: [PATCH v2 net-next 5/6] tcp: allow one skb to be received per socket under memory pressure Date: Fri, 15 May 2015 12:39:29 -0700 Message-Id: <1431718770-3815-6-git-send-email-edumazet@google.com> X-Mailer: git-send-email 2.2.0.rc0.207.ga3a616c In-Reply-To: <1431718770-3815-1-git-send-email-edumazet@google.com> References: <1431718770-3815-1-git-send-email-edumazet@google.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org While testing tight tcp_mem settings, I found tcp sessions could be stuck because we do not allow even one skb to be received on them. By allowing one skb to be received, we introduce fairness and eventuallu force memory hogs to release their allocation. Signed-off-by: Eric Dumazet --- net/ipv4/tcp_input.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 093779f7e893..40c435997e54 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -4507,10 +4507,12 @@ static void tcp_data_queue(struct sock *sk, struct sk_buff *skb) if (eaten <= 0) { queue_and_out: - if (eaten < 0 && - tcp_try_rmem_schedule(sk, skb, skb->truesize)) - goto drop; - + if (eaten < 0) { + if (skb_queue_len(&sk->sk_receive_queue) == 0) + sk_forced_mem_schedule(sk, skb->truesize); + else if (tcp_try_rmem_schedule(sk, skb, skb->truesize)) + goto drop; + } eaten = tcp_queue_rcv(sk, skb, 0, &fragstolen); } tcp_rcv_nxt_update(tp, TCP_SKB_CB(skb)->end_seq);