From 98d51dce2ff859fec9330c7a9f2949747a25bf5c Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Wed, 16 Apr 2003 22:52:04 -0700 Subject: [PATCH] [PATCH] Handle invalid pfns in page_add/remove_rmap My recent micro-optmisation to these functions broke the pfn_valid() checks. Revert it. --- mm/rmap.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mm/rmap.c b/mm/rmap.c index 6fc82b8d0127e..a6040d1e3f897 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -170,10 +170,10 @@ page_add_rmap(struct page *page, pte_t *ptep, struct pte_chain *pte_chain) pte_addr_t pte_paddr = ptep_to_paddr(ptep); struct pte_chain *cur_pte_chain; - pte_chain_lock(page); - if (!pfn_valid(page_to_pfn(page)) || PageReserved(page)) - goto out; + return pte_chain; + + pte_chain_lock(page); if (page->pte.direct == 0) { page->pte.direct = pte_paddr; @@ -225,10 +225,10 @@ void page_remove_rmap(struct page *page, pte_t *ptep) pte_addr_t pte_paddr = ptep_to_paddr(ptep); struct pte_chain *pc; - pte_chain_lock(page); - if (!pfn_valid(page_to_pfn(page)) || PageReserved(page)) - goto out_unlock; + return; + + pte_chain_lock(page); if (!page_mapped(page)) goto out_unlock; /* remap_page_range() from a driver? */ -- 2.53.0