Commit 9109bd52 authored by Jinjiang Tu's avatar Jinjiang Tu Committed by Andrew Morton
Browse files

mm/memory-failure: hold PTL in hwpoison_hugetlb_range

Hold PTL in hwpoison_hugetlb_range() to avoid operating on stale page, as
hwpoison_pte_range() have done.

This change is not known to address any issues which users have
experienced.

Link: https://lkml.kernel.org/r/20250725033112.2690158-1-tujinjiang@huawei.com


Signed-off-by: default avatarJinjiang Tu <tujinjiang@huawei.com>
Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
Cc: Andrei Vagin <avagin@gmail.com>
Cc: Andrii Nakryiko <andrii@kernel.org>
Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: Brahmajit Das <brahmajit.xyz@gmail.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: David Rientjes <rientjes@google.com>
Cc: Dev Jain <dev.jain@arm.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Joern Engel <joern@logfs.org>
Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 6c2da14a
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -837,11 +837,17 @@ static int hwpoison_hugetlb_range(pte_t *ptep, unsigned long hmask,
			    struct mm_walk *walk)
{
	struct hwpoison_walk *hwp = walk->private;
	pte_t pte = huge_ptep_get(walk->mm, addr, ptep);
	struct hstate *h = hstate_vma(walk->vma);
	spinlock_t *ptl;
	pte_t pte;
	int ret;

	return check_hwpoisoned_entry(pte, addr, huge_page_shift(h),
	ptl = huge_pte_lock(h, walk->mm, ptep);
	pte = huge_ptep_get(walk->mm, addr, ptep);
	ret = check_hwpoisoned_entry(pte, addr, huge_page_shift(h),
					hwp->pfn, &hwp->tk);
	spin_unlock(ptl);
	return ret;
}
#else
#define hwpoison_hugetlb_range	NULL