mm/memory-failure.c: rework the try_to_unmap logic in hwpoison_user_mappings()
Only for hugetlb pages in shared mappings, try_to_unmap should take semaphore in write mode here. Rework the code to make it clear. Link: https://lkml.kernel.org/r/20220218090118.1105-7-linmiaohe@huawei.com Signed-off-by: Miaohe Lin <linmiaohe@huawei.com> Acked-by: Naoya Horiguchi <naoya.horiguchi@nec.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
67ff51c6a6
commit
357670f79e
@ -1404,10 +1404,7 @@ static bool hwpoison_user_mappings(struct page *p, unsigned long pfn,
|
|||||||
if (kill)
|
if (kill)
|
||||||
collect_procs(hpage, &tokill, flags & MF_ACTION_REQUIRED);
|
collect_procs(hpage, &tokill, flags & MF_ACTION_REQUIRED);
|
||||||
|
|
||||||
if (!PageHuge(hpage)) {
|
if (PageHuge(hpage) && !PageAnon(hpage)) {
|
||||||
try_to_unmap(hpage, ttu);
|
|
||||||
} else {
|
|
||||||
if (!PageAnon(hpage)) {
|
|
||||||
/*
|
/*
|
||||||
* For hugetlb pages in shared mappings, try_to_unmap
|
* For hugetlb pages in shared mappings, try_to_unmap
|
||||||
* could potentially call huge_pmd_unshare. Because of
|
* could potentially call huge_pmd_unshare. Because of
|
||||||
@ -1424,7 +1421,6 @@ static bool hwpoison_user_mappings(struct page *p, unsigned long pfn,
|
|||||||
} else {
|
} else {
|
||||||
try_to_unmap(hpage, ttu);
|
try_to_unmap(hpage, ttu);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
unmap_success = !page_mapped(hpage);
|
unmap_success = !page_mapped(hpage);
|
||||||
if (!unmap_success)
|
if (!unmap_success)
|
||||||
|
Loading…
Reference in New Issue
Block a user