Commit 2ace36f0 authored by Kefeng Wang's avatar Kefeng Wang Committed by Andrew Morton
Browse files

mm: memory-failure: cleanup try_to_split_thp_page()

Since commit 5d1fd5dc ("mm,hwpoison: introduce MF_MSG_UNSPLIT_THP"),
the action_result(,MF_MSG_UNSPLIT_THP,) called to show memory error event
in memory_failure(), so the pr_info() in try_to_split_thp_page() is only
needed in soft_offline_in_use_page().

Meanwhile this could also fix the unexpected prefix for "thp split failed"
due to commit 96f96763 ("mm: memory-failure: convert to pr_fmt()").

Link: https://lkml.kernel.org/r/20220809111813.139690-1-wangkefeng.wang@huawei.com


Signed-off-by: default avatarKefeng Wang <wangkefeng.wang@huawei.com>
Acked-by: default avatarNaoya Horiguchi <naoya.horiguchi@nec.com>
Cc: Miaohe Lin <linmiaohe@huawei.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent f35b5d7d
Loading
Loading
Loading
Loading
+12 −11
Original line number Diff line number Diff line
@@ -1524,20 +1524,18 @@ static int identify_page_state(unsigned long pfn, struct page *p,
	return page_action(ps, p, pfn);
}

static int try_to_split_thp_page(struct page *page, const char *msg)
static int try_to_split_thp_page(struct page *page)
{
	lock_page(page);
	if (unlikely(split_huge_page(page))) {
		unsigned long pfn = page_to_pfn(page);
	int ret;

	lock_page(page);
	ret = split_huge_page(page);
	unlock_page(page);
		pr_info("%s: %#lx: thp split failed\n", msg, pfn);

	if (unlikely(ret))
		put_page(page);
		return -EBUSY;
	}
	unlock_page(page);

	return 0;
	return ret;
}

static void unmap_and_kill(struct list_head *to_kill, unsigned long pfn,
@@ -2079,7 +2077,7 @@ int memory_failure(unsigned long pfn, int flags)
		 * page is a valid handlable page.
		 */
		SetPageHasHWPoisoned(hpage);
		if (try_to_split_thp_page(p, "Memory Failure") < 0) {
		if (try_to_split_thp_page(p) < 0) {
			action_result(pfn, MF_MSG_UNSPLIT_THP, MF_IGNORED);
			res = -EBUSY;
			goto unlock_mutex;
@@ -2505,8 +2503,11 @@ static int soft_offline_in_use_page(struct page *page)
	struct page *hpage = compound_head(page);

	if (!PageHuge(page) && PageTransHuge(hpage))
		if (try_to_split_thp_page(page, "soft offline") < 0)
		if (try_to_split_thp_page(page) < 0) {
			pr_info("soft offline: %#lx: thp split failed\n",
				page_to_pfn(page));
			return -EBUSY;
		}
	return __soft_offline_page(page);
}