From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 87D51C433E7 for ; Tue, 13 Oct 2020 14:43:38 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 08AE92487A for ; Tue, 13 Oct 2020 14:43:37 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 08AE92487A Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 6C4B76B005D; Tue, 13 Oct 2020 10:43:37 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 69C3A900002; Tue, 13 Oct 2020 10:43:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 589296B0068; Tue, 13 Oct 2020 10:43:37 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0137.hostedemail.com [216.40.44.137]) by kanga.kvack.org (Postfix) with ESMTP id 4E8826B005D for ; Tue, 13 Oct 2020 10:43:37 -0400 (EDT) Received: from smtpin25.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 6D4C4180AD807 for ; Tue, 13 Oct 2020 14:43:35 +0000 (UTC) X-FDA: 77367170790.25.yard90_1e0b12027204 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin25.hostedemail.com (Postfix) with ESMTP id 069CC1804E3B5 for ; Tue, 13 Oct 2020 14:43:35 +0000 (UTC) X-HE-Tag: yard90_1e0b12027204 X-Filterd-Recvd-Size: 2808 Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by imf45.hostedemail.com (Postfix) with ESMTP for ; Tue, 13 Oct 2020 14:43:34 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 9FECBAC7D; Tue, 13 Oct 2020 14:43:33 +0000 (UTC) From: Oscar Salvador To: n-horiguchi@ah.jp.nec.com Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Oscar Salvador Subject: [PATCH v5 3/4] mm,hwpoison: take free pages off the buddy freelists for hugetlb Date: Tue, 13 Oct 2020 16:44:46 +0200 Message-Id: <20201013144447.6706-4-osalvador@suse.de> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201013144447.6706-1-osalvador@suse.de> References: <20201013144447.6706-1-osalvador@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Currently, free hugetlb get dissolved, but we also need to make sure to take the poisoned subpage off the buddy frelists, so no one stumbles upon it (see previous patch for more information). Signed-off-by: Oscar Salvador --- mm/memory-failure.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 181bed890c16..30aadeca97d2 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -809,7 +809,7 @@ static int me_swapcache_clean(struct page *p, unsigne= d long pfn) */ static int me_huge_page(struct page *p, unsigned long pfn) { - int res =3D 0; + int res; struct page *hpage =3D compound_head(p); struct address_space *mapping; =20 @@ -820,6 +820,7 @@ static int me_huge_page(struct page *p, unsigned long= pfn) if (mapping) { res =3D truncate_error_page(hpage, pfn, mapping); } else { + res =3D MF_FAILED; unlock_page(hpage); /* * migration entry prevents later access on error anonymous @@ -828,8 +829,10 @@ static int me_huge_page(struct page *p, unsigned lon= g pfn) */ if (PageAnon(hpage)) put_page(hpage); - dissolve_free_huge_page(p); - res =3D MF_RECOVERED; + if (!dissolve_free_huge_page(p) && take_page_off_buddy(p)) { + page_ref_inc(p); + res =3D MF_RECOVERED; + } lock_page(hpage); } =20 @@ -1198,9 +1201,13 @@ static int memory_failure_hugetlb(unsigned long pf= n, int flags) } } unlock_page(head); - dissolve_free_huge_page(p); - action_result(pfn, MF_MSG_FREE_HUGE, MF_DELAYED); - return 0; + res =3D MF_FAILED; + if (!dissolve_free_huge_page(p) && take_page_off_buddy(p)) { + page_ref_inc(p); + res =3D MF_RECOVERED; + } + action_result(pfn, MF_MSG_FREE_HUGE, res); + return res =3D=3D MF_RECOVERED ? 0 : -EBUSY; } =20 lock_page(head); --=20 2.26.2