diff --git a/mm/page_idle.c b/mm/page_idle.c index 2c9ebe12b40d4d..2c553ba969f862 100644 --- a/mm/page_idle.c +++ b/mm/page_idle.c @@ -72,7 +72,7 @@ static int page_idle_clear_pte_refs_one(struct page *page, if (pmd_trans_huge(*pmd)) { ptl = pmd_lock(mm, pmd); - if (!pmd_present(*pmd)) + if (!pmd_present(*pmd)) goto unlock_pmd; if (unlikely(!pmd_trans_huge(*pmd))) { spin_unlock(ptl); @@ -90,6 +90,7 @@ static int page_idle_clear_pte_refs_one(struct page *page, return SWAP_AGAIN; } else { pmd_t pmde = *pmd; + barrier(); if (!pmd_present(pmde) || pmd_trans_huge(pmde)) return SWAP_AGAIN; diff --git a/mm/rmap.c b/mm/rmap.c index 8ceacbdb8f1c8f..936c4658417909 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -866,6 +866,7 @@ static int page_referenced_one(struct page *page, struct vm_area_struct *vma, return ret; } else { pmd_t pmde = *pmd; + barrier(); if (!pmd_present(pmde) || pmd_trans_huge(pmde)) return SWAP_AGAIN;