From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932684AbcGHUAv (ORCPT ); Fri, 8 Jul 2016 16:00:51 -0400 Received: from outbound-smtp11.blacknight.com ([46.22.139.16]:47061 "EHLO outbound-smtp11.blacknight.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755736AbcGHUAe (ORCPT ); Fri, 8 Jul 2016 16:00:34 -0400 From: Mel Gorman To: Andrew Morton Cc: Linux-MM , LKML , Mel Gorman Subject: [PATCH 3/3] mm, meminit: Ensure node is online before checking whether pages are uninitialised Date: Fri, 8 Jul 2016 21:00:31 +0100 Message-Id: <1468008031-3848-4-git-send-email-mgorman@techsingularity.net> X-Mailer: git-send-email 2.6.4 In-Reply-To: <1468008031-3848-1-git-send-email-mgorman@techsingularity.net> References: <1468008031-3848-1-git-send-email-mgorman@techsingularity.net> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org early_page_uninitialised looks up an arbitrary PFN. While a machine without node 0 will boot with "mm, page_alloc: Always return a valid node from early_pfn_to_nid", it works because it assumes that nodes are always in PFN order. This is not guaranteed so this patch adds robustness by always checking if the node being checked is online. Signed-off-by: Mel Gorman Cc: # 4.2+ --- mm/page_alloc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 5a616de1adca..03c9322da942 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -286,7 +286,9 @@ static inline void reset_deferred_meminit(pg_data_t *pgdat) /* Returns true if the struct page for the pfn is uninitialised */ static inline bool __meminit early_page_uninitialised(unsigned long pfn) { - if (pfn >= NODE_DATA(early_pfn_to_nid(pfn))->first_deferred_pfn) + int nid = early_pfn_to_nid(pfn); + + if (node_online(nid) && pfn >= NODE_DATA(nid)->first_deferred_pfn) return true; return false; -- 2.6.4