]> git.hungrycats.org Git - linux/commitdiff
[PATCH] Handle invalid pfns in page_add/remove_rmap
authorAndrew Morton <akpm@digeo.com>
Thu, 17 Apr 2003 05:52:04 +0000 (22:52 -0700)
committerBen Collins <bcollins@debian.org>
Thu, 17 Apr 2003 05:52:04 +0000 (22:52 -0700)
My recent micro-optmisation to these functions broke the pfn_valid()
checks.  Revert it.

mm/rmap.c

index 6fc82b8d0127ed926805e4d9c3e90fe66d4a7afb..a6040d1e3f897b9092fda7a842587787381475d7 100644 (file)
--- 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? */