Merge tag 'nvme-6.5-2023-06-30' of git://git.infradead.org/nvme into block-6.5
[platform/kernel/linux-starfive.git] / mm / mlock.c
index 40b43f8..d7db945 100644 (file)
@@ -312,6 +312,7 @@ static int mlock_pte_range(pmd_t *pmd, unsigned long addr,
        struct vm_area_struct *vma = walk->vma;
        spinlock_t *ptl;
        pte_t *start_pte, *pte;
+       pte_t ptent;
        struct folio *folio;
 
        ptl = pmd_trans_huge_lock(pmd, vma);
@@ -329,10 +330,15 @@ static int mlock_pte_range(pmd_t *pmd, unsigned long addr,
        }
 
        start_pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
+       if (!start_pte) {
+               walk->action = ACTION_AGAIN;
+               return 0;
+       }
        for (pte = start_pte; addr != end; pte++, addr += PAGE_SIZE) {
-               if (!pte_present(*pte))
+               ptent = ptep_get(pte);
+               if (!pte_present(ptent))
                        continue;
-               folio = vm_normal_folio(vma, addr, *pte);
+               folio = vm_normal_folio(vma, addr, ptent);
                if (!folio || folio_is_zone_device(folio))
                        continue;
                if (folio_test_large(folio))