From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752730AbdARKTC (ORCPT ); Wed, 18 Jan 2017 05:19:02 -0500 Received: from outbound-smtp07.blacknight.com ([46.22.139.12]:37743 "EHLO outbound-smtp07.blacknight.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752119AbdARKS4 (ORCPT ); Wed, 18 Jan 2017 05:18:56 -0500 Date: Wed, 18 Jan 2017 10:08:53 +0000 From: Mel Gorman To: Vlastimil Babka Cc: Ganapatrao Kulkarni , Michal Hocko , linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [RFC 4/4] mm, page_alloc: fix premature OOM when racing with cpuset mems update Message-ID: <20170118100853.gop3iia4sq5xk3t2@techsingularity.net> References: <20170117221610.22505-1-vbabka@suse.cz> <20170117221610.22505-5-vbabka@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline In-Reply-To: <20170117221610.22505-5-vbabka@suse.cz> User-Agent: Mutt/1.6.2 (2016-07-01) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jan 17, 2017 at 11:16:10PM +0100, Vlastimil Babka wrote: > Ganapatrao Kulkarni reported that the LTP test cpuset01 in stress mode triggers > OOM killer in few seconds, despite lots of free memory. The test attemps to > repeatedly fault in memory in one process in a cpuset, while changing allowed > nodes of the cpuset between 0 and 1 in another process. > > The problem comes from insufficient protection against cpuset changes, which > can cause get_page_from_freelist() to consider all zones as non-eligible due to > nodemask and/or current->mems_allowed. This was masked in the past by > sufficient retries, but since commit 682a3385e773 ("mm, page_alloc: inline the > fast path of the zonelist iterator") we fix the preferred_zoneref once, and > don't iterate the whole zonelist in further attempts. > > A previous patch fixed this problem for current->mems_allowed. However, cpuset > changes also update the policy nodemasks. The fix has two parts. We have to > repeat the preferred_zoneref search when we detect cpuset update by way of > seqcount, and we have to check the seqcount before considering OOM. > > Reported-by: Ganapatrao Kulkarni > Fixes: 682a3385e773 ("mm, page_alloc: inline the fast path of the zonelist iterator") > Signed-off-by: Vlastimil Babka Acked-by: Mel Gorman -- Mel Gorman SUSE Labs