Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp403302imu; Thu, 8 Nov 2018 22:48:53 -0800 (PST) X-Google-Smtp-Source: AJdET5cG3Adxcc2cA/SxAwadAqewZBV/lyApsxZok2c8+mO7Zud+33NnzJJC7ZesorgmZS4BoeKU X-Received: by 2002:a17:902:c7:: with SMTP id a65-v6mr7883568pla.296.1541746133403; Thu, 08 Nov 2018 22:48:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1541746133; cv=none; d=google.com; s=arc-20160816; b=WAlpowU70P5xsoivPxUqMhpCkNmCgVpPMosD8u4cNjoBV5mMVO9435Mm08V9UaT/2d urCr+kUBM3epXGQEXwRiJn2fPKNgRSn5XXVeZGG5wRpPW5ugVa83Q1zbdSCMjNOwHJEl 8tfNhPFlPi7iwvleM2emjd5yKiuRnGKx1U2GdG3//5mndKHTOsVY8u7YpjjshwQG7PCG riuaeUBwM+D/a3zgCLQ5vosrVyZ+/bZ9OuXUe2CsqTFXAtlrcldngKZJzt5bxY33RQlz VJ+WnNClcxBwAqdKzWgyFn0WJeF+pjB5U2vJxX9Hlh4twBuVQbNczM5hJU7JtVXHX5z7 /WHw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=N7S6I8bftQslxdirzJ9Dh7FpKhaSjYR8AwdNzVMTAb8=; b=NPyy70eaSr6eJINrNc/epFZLaZec6TTiB6h/97+gwOXzCYVtleJE2a8Vsn2FXSvHgp VRFlY5qPsHiI41cuKlmAdi/ZCkchusQjEXyhvmrdwM2/ael+Sm7E73UR9pwvd68D3sxx NnmutZVAIBmoRr4scq4W8TyqGBksozRaMF0p0biE2D+8l+HAq3qVAeKLPG536Eza6k+4 lqasq0BFU/KL9Nb1HJnhPwn/ipx0XW//ToZfKhcQzigqJVC5OEdIDMp89CbceMwcVNAZ FBKRmKurhhbWSFRPtUJIfDchPcfFYrpAib98U8Ol7/F6IYe98vcZ9YNEDf+i3sUKjtLC T79w== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=Vbtsjxzc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n9-v6si7462043pfh.96.2018.11.08.22.48.38; Thu, 08 Nov 2018 22:48:53 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=Vbtsjxzc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728159AbeKIQ07 (ORCPT + 99 others); Fri, 9 Nov 2018 11:26:59 -0500 Received: from mail-pg1-f194.google.com ([209.85.215.194]:35731 "EHLO mail-pg1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727691AbeKIQ06 (ORCPT ); Fri, 9 Nov 2018 11:26:58 -0500 Received: by mail-pg1-f194.google.com with SMTP id 32-v6so455915pgu.2 for ; Thu, 08 Nov 2018 22:47:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=N7S6I8bftQslxdirzJ9Dh7FpKhaSjYR8AwdNzVMTAb8=; b=Vbtsjxzc4u+FeISNSR2pYhK61DdEYtKpq4/sBiclUcKp28SAlJ/ebQ3kz6WgJ+sKSK rCwEvFupUmRMKzsfTzv5QEwSqqt/tiqAzHcdRNYObvLle7KPs+ufmMdRz9KcLjTQzLIN 4BLFd49ItwISbR2Ov1n4VRukiCJZMv9CkhA6XEjDiDf6/KV7W4g30HpYD0xRa60G/Lbk Anzp3zCauT2LF2xV9SC0J4il0jh7HkSmo+a57gzmKuLNK/HwMjFLZ9vI9JbApHq+M3Ji +uWTgs/ssSFTjYL7TJtSfRPmB0ddAoRLVcZiH70dgCovCA+EjgpAwNvFgRBEP5X3bz/n DlNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=N7S6I8bftQslxdirzJ9Dh7FpKhaSjYR8AwdNzVMTAb8=; b=D0YjBL5H/BFj+x5iwAmUhVrqnr4pl7K0mrIohC1o5PeFFiBMGPnKxaeD/aYp0VottK VLVYRFoP4gj94rjFNns1TUd4+nnqQ2E8pqx1F7ej1u4QaqaQc31AJZoAuac1cwv6m/wo lGXxJqRkvV2bKKsi5AQkXkGyqgG0l74TWiZPc+EhmuakHR/f+MbRbuNnlP1NuhYDaUlz snLozR6kdvu+nahAJ+oYAQYs8/Vqtp1c5PgwN2abxtTCFZ/Z5UMeGH5Crd8oINelnbMx P+BV67nGv9kTMSYAdaBrP4cb6OwWvA91hkgcGeppUW7IYO4RGtbJOFn+0Ms6rI6cr1bi J/zQ== X-Gm-Message-State: AGRZ1gJqhqTG/GXEY3qBFPX72Cuu+T2UlbwzONeLSOGKHqrtXYzJuAQB 7JLyxiiSwJlJFgcVBCIAqg== X-Received: by 2002:a63:e54d:: with SMTP id z13-v6mr6385719pgj.169.1541746069212; Thu, 08 Nov 2018 22:47:49 -0800 (PST) Received: from www9186uo.sakura.ne.jp (www9186uo.sakura.ne.jp. [153.121.56.200]) by smtp.gmail.com with ESMTPSA id c70-v6sm6808355pfg.97.2018.11.08.22.47.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 08 Nov 2018 22:47:48 -0800 (PST) From: Naoya Horiguchi To: linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: Michal Hocko , Andrew Morton , Mike Kravetz , xishi.qiuxishi@alibaba-inc.com, Laurent Dufour Subject: [RFC][PATCH v1 09/11] mm: hwpoison: apply buddy page handling code to hard-offline Date: Fri, 9 Nov 2018 15:47:13 +0900 Message-Id: <1541746035-13408-10-git-send-email-n-horiguchi@ah.jp.nec.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1541746035-13408-1-git-send-email-n-horiguchi@ah.jp.nec.com> References: <1541746035-13408-1-git-send-email-n-horiguchi@ah.jp.nec.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hard-offline of free buddy pages can be handled in the same manner as soft-offline. So this patch applies the new semantics to hard-offline to more complete isolation of offlined page. As a result, the successful case is worth MF_RECOVERED instead of MF_DELAYED, so this patch also changes it. Signed-off-by: Naoya Horiguchi --- mm/memory-failure.c | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git v4.19-mmotm-2018-10-30-16-08/mm/memory-failure.c v4.19-mmotm-2018-10-30-16-08_patched/mm/memory-failure.c index ecafd4a..af541141 100644 --- v4.19-mmotm-2018-10-30-16-08/mm/memory-failure.c +++ v4.19-mmotm-2018-10-30-16-08_patched/mm/memory-failure.c @@ -772,6 +772,16 @@ static int me_swapcache_clean(struct page *p, unsigned long pfn) return MF_FAILED; } +static int me_huge_free_page(struct page *p) +{ + int rc = dissolve_free_huge_page(p); + + if (!rc && set_hwpoison_free_buddy_page(p)) + return MF_RECOVERED; + else + return MF_FAILED; +} + /* * Huge pages. Needs work. * Issues: @@ -799,8 +809,7 @@ static int me_huge_page(struct page *p, unsigned long pfn) */ if (PageAnon(hpage)) put_page(hpage); - dissolve_free_huge_page(p); - res = MF_RECOVERED; + res = me_huge_free_page(p); lock_page(hpage); } @@ -1108,8 +1117,11 @@ static int memory_failure_hugetlb(unsigned long pfn, int flags) } } unlock_page(head); - dissolve_free_huge_page(p); - action_result(pfn, MF_MSG_FREE_HUGE, MF_DELAYED); + + res = me_huge_free_page(p); + if (res == MF_FAILED) + num_poisoned_pages_dec(); + action_result(pfn, MF_MSG_FREE_HUGE, res); return 0; } @@ -1270,6 +1282,13 @@ int memory_failure(unsigned long pfn, int flags) p = pfn_to_page(pfn); if (PageHuge(p)) return memory_failure_hugetlb(pfn, flags); + + if (set_hwpoison_free_buddy_page(p)) { + action_result(pfn, MF_MSG_BUDDY, MF_RECOVERED); + num_poisoned_pages_inc(); + return 0; + } + if (TestSetPageHWPoison(p)) { pr_err("Memory failure: %#lx: already hardware poisoned\n", pfn); @@ -1281,8 +1300,7 @@ int memory_failure(unsigned long pfn, int flags) /* * We need/can do nothing about count=0 pages. - * 1) it's a free page, and therefore in safe hand: - * prep_new_page() will be the gate keeper. + * 1) it's a free page, and removed from buddy allocator. * 2) it's part of a non-compound high order page. * Implies some kernel user: cannot stop them from * R/W the page; let's pray that the page has been @@ -1291,8 +1309,8 @@ int memory_failure(unsigned long pfn, int flags) * that may make page_ref_freeze()/page_ref_unfreeze() mismatch. */ if (!get_hwpoison_page(p)) { - if (is_free_buddy_page(p)) { - action_result(pfn, MF_MSG_BUDDY, MF_DELAYED); + if (set_hwpoison_free_buddy_page(p)) { + action_result(pfn, MF_MSG_BUDDY, MF_RECOVERED); return 0; } else { action_result(pfn, MF_MSG_KERNEL_HIGH_ORDER, MF_IGNORED); @@ -1330,8 +1348,8 @@ int memory_failure(unsigned long pfn, int flags) */ shake_page(p, 0); /* shake_page could have turned it free. */ - if (!PageLRU(p) && is_free_buddy_page(p)) { - action_result(pfn, MF_MSG_BUDDY_2ND, MF_DELAYED); + if (!PageLRU(p) && set_hwpoison_free_buddy_page(p)) { + action_result(pfn, MF_MSG_BUDDY_2ND, MF_RECOVERED); return 0; } -- 2.7.0