From patchwork Wed Jan 9 02:54:42 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 210607 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 F07462C00FE for ; Wed, 9 Jan 2013 13:55:07 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756585Ab3AICyr (ORCPT ); Tue, 8 Jan 2013 21:54:47 -0500 Received: from mail-pa0-f50.google.com ([209.85.220.50]:49700 "EHLO mail-pa0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756271Ab3AICyp (ORCPT ); Tue, 8 Jan 2013 21:54:45 -0500 Received: by mail-pa0-f50.google.com with SMTP id hz10so721630pad.37 for ; Tue, 08 Jan 2013 18:54:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:subject:from:to:cc:in-reply-to:references:content-type :date:message-id:mime-version:x-mailer:content-transfer-encoding; bh=TN9NUfAl4gNlGXdvVgLc9yEBvLi1btvlPFXPqJtmPJQ=; b=TuNBshzrYfGHHnjZsFtCf14GoMiprjZg+zO34PiXnNSto41mk/EYFMiuiI55yQyebr MY2F72i/DdyQpgcCF4J7YYWH8Pk5P/k3lCNx8lWqpADtW+rWBVsG+T6Rl/XOx0k13Dho s/oup8J9Ux51PRv9lSAfqMkTSKyspQ7PD/XGEB7wx0uqxnjxCXA9NCjEU8YO+q9m4rco 0jZydYqd+8EgeS1GELqh3pNYzWsLrH1+NdCsM4Ba3faQWc0+zsd411cO+QghvzmzYpJ9 Rk9FQwrpckrcIWaC6jJql7ea8WVzIxOOBZCfh3LEevktRrWcXu/SAfMaQoKofWqRs+sF DGrQ== X-Received: by 10.68.135.133 with SMTP id ps5mr202706963pbb.132.1357700085535; Tue, 08 Jan 2013 18:54:45 -0800 (PST) Received: from ?IPv6:2620:0:1000:3304:224:d7ff:fee3:2a94? ([2620:0:1000:3304:224:d7ff:fee3:2a94]) by mx.google.com with ESMTPS id sb3sm40695237pbc.44.2013.01.08.18.54.43 (version=SSLv3 cipher=OTHER); Tue, 08 Jan 2013 18:54:44 -0800 (PST) Subject: Re: ppoll() stuck on POLLIN while TCP peer is sending From: Eric Dumazet To: Eric Wong , Mel Gorman Cc: linux-mm@kvack.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Rik van Riel , Minchan Kim , Andrew Morton , Linus Torvalds In-Reply-To: <1357698749.27446.6.camel@edumazet-glaptop> References: <20121228014503.GA5017@dcvr.yhbt.net> <20130102200848.GA4500@dcvr.yhbt.net> <20130104160148.GB3885@suse.de> <20130106120700.GA24671@dcvr.yhbt.net> <20130107122516.GC3885@suse.de> <20130107223850.GA21311@dcvr.yhbt.net> <20130108224313.GA13304@suse.de> <20130108232325.GA5948@dcvr.yhbt.net> <1357697647.18156.1217.camel@edumazet-glaptop> <1357698749.27446.6.camel@edumazet-glaptop> Date: Tue, 08 Jan 2013 18:54:42 -0800 Message-ID: <1357700082.27446.11.camel@edumazet-glaptop> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On Tue, 2013-01-08 at 18:32 -0800, Eric Dumazet wrote: > > Hmm, it seems sk_filter() can return -ENOMEM because skb has the > pfmemalloc() set. > > One TCP socket keeps retransmitting an SKB via loopback, and TCP stack > drops the packet again and again. sock_init_data() sets sk->sk_allocation to GFP_KERNEL Shouldnt it use (GFP_KERNEL | __GFP_NOMEMALLOC) instead ? --- 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/core/sock.c b/net/core/sock.c index bc131d4..76c4b39 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -286,6 +286,7 @@ void sk_set_memalloc(struct sock *sk) { sock_set_flag(sk, SOCK_MEMALLOC); sk->sk_allocation |= __GFP_MEMALLOC; + sk->sk_allocation &= ~__GFP_NOMEMALLOC; static_key_slow_inc(&memalloc_socks); } EXPORT_SYMBOL_GPL(sk_set_memalloc); @@ -294,6 +295,7 @@ void sk_clear_memalloc(struct sock *sk) { sock_reset_flag(sk, SOCK_MEMALLOC); sk->sk_allocation &= ~__GFP_MEMALLOC; + sk->sk_allocation |= __GFP_NOMEMALLOC; static_key_slow_dec(&memalloc_socks); /* @@ -2230,7 +2232,7 @@ void sock_init_data(struct socket *sock, struct sock *sk) init_timer(&sk->sk_timer); - sk->sk_allocation = GFP_KERNEL; + sk->sk_allocation = GFP_KERNEL | __GFP_NOMEMALLOC; sk->sk_rcvbuf = sysctl_rmem_default; sk->sk_sndbuf = sysctl_wmem_default; sk->sk_state = TCP_CLOSE;