Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752150AbbHQEe5 (ORCPT ); Mon, 17 Aug 2015 00:34:57 -0400 Received: from TYO202.gate.nec.co.jp ([210.143.35.52]:35403 "EHLO tyo202.gate.nec.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750716AbbHQEe4 convert rfc822-to-8bit (ORCPT ); Mon, 17 Aug 2015 00:34:56 -0400 From: Naoya Horiguchi To: Wanpeng Li CC: Andrew Morton , "linux-mm@kvack.org" , "linux-kernel@vger.kernel.org" , Naoya Horiguchi , Naoya Horiguchi Subject: [PATCH v2 3/3] mm/hwpoison: don't try to unpoison containment-failed pages Thread-Topic: [PATCH v2 3/3] mm/hwpoison: don't try to unpoison containment-failed pages Thread-Index: AQHQ2KWvTWK3/8Q9h0udjXEX8Wz6dg== Date: Mon, 17 Aug 2015 04:32:11 +0000 Message-ID: <1439785924-27885-4-git-send-email-n-horiguchi@ah.jp.nec.com> References: <1439785924-27885-1-git-send-email-n-horiguchi@ah.jp.nec.com> In-Reply-To: <1439785924-27885-1-git-send-email-n-horiguchi@ah.jp.nec.com> Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.128.101.1] Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 8BIT MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1806 Lines: 51 memory_failure() can be called at any page at any time, which means that we can't eliminate the possibility of containment failure. In such case the best option is to leak the page intentionally (and never touch it later.) We have an unpoison function for testing, and it cannot handle such containment-failed pages, which results in kernel panic (visible with various calltraces.) So this patch suggests that we limit the unpoisonable pages to properly contained pages and ignore any other ones. Testers are recommended to keep in mind that there're un-unpoisonable pages when writing test programs. Signed-off-by: Naoya Horiguchi --- mm/memory-failure.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git mmotm-2015-08-13-15-29.orig/mm/memory-failure.c mmotm-2015-08-13-15-29/mm/memory-failure.c index 7986db56e240..613389e9e5a8 100644 --- mmotm-2015-08-13-15-29.orig/mm/memory-failure.c +++ mmotm-2015-08-13-15-29/mm/memory-failure.c @@ -1433,6 +1433,22 @@ int unpoison_memory(unsigned long pfn) return 0; } + if (page_count(page) > 1) { + pr_info("MCE: Someone grabs the hwpoison page %#lx\n", pfn); + return 0; + } + + if (page_mapped(page)) { + pr_info("MCE: Someone maps the hwpoison page %#lx\n", pfn); + return 0; + } + + if (page_mapping(page)) { + pr_info("MCE: the hwpoison page has non-NULL mapping %#lx\n", + pfn); + return 0; + } + /* * unpoison_memory() can encounter thp only when the thp is being * worked by memory_failure() and the page lock is not held yet. -- 2.4.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/