Re: [PATCH 17/31] mm/various: give up if pte_offset_map[_lock]() fails

From: Qi Zheng
Date: Mon May 22 2023 - 08:27:48 EST




On 2023/5/22 13:10, Hugh Dickins wrote:
Following the examples of nearby code, various functions can just give
up if pte_offset_map() or pte_offset_map_lock() fails. And there's no
need for a preliminary pmd_trans_unstable() or other such check, since
such cases are now safely handled inside.

Signed-off-by: Hugh Dickins <hughd@xxxxxxxxxx>
---
mm/gup.c | 9 ++++++---
mm/ksm.c | 7 ++++---
mm/memcontrol.c | 8 ++++----
mm/memory-failure.c | 8 +++++---
mm/migrate.c | 3 +++
mm/swap_state.c | 3 +++
6 files changed, 25 insertions(+), 13 deletions(-)


[...]

diff --git a/mm/migrate.c b/mm/migrate.c
index 3ecb7a40075f..308a56f0b156 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -305,6 +305,9 @@ void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd,
swp_entry_t entry;
ptep = pte_offset_map_lock(mm, pmd, address, &ptl);
+ if (!ptep)
+ return;

Maybe we should return false and let the caller handle the failure.

+
pte = *ptep;
pte_unmap(ptep);
diff --git a/mm/swap_state.c b/mm/swap_state.c
index b76a65ac28b3..db2ec85ef332 100644
--- a/mm/swap_state.c
+++ b/mm/swap_state.c
@@ -734,6 +734,9 @@ static void swap_ra_info(struct vm_fault *vmf,
/* Copy the PTEs because the page table may be unmapped */
orig_pte = pte = pte_offset_map(vmf->pmd, faddr);
+ if (!pte)
+ return;

Ditto?

+
if (fpfn == pfn + 1) {
lpfn = fpfn;
rpfn = fpfn + win;

--
Thanks,
Qi