From ad6e519be1a98976388397325c6e3365e42c4271 Mon Sep 17 00:00:00 2001 From: Hugh Dickins Date: Fri, 4 Jun 2004 20:52:06 -0700 Subject: [PATCH] [PATCH] mm: follow_page invalid pte_page The follow_page write-access case is relying on pte_page before checking pfn_valid: rearrange that - and we don't need three struct page *pages. (I notice mempolicy.c's verify_pages is also relying on pte_page, but I'll leave that to Andi: maybe it ought to be failing on, or skipping over, VM_IO or VM_RESERVED vmas?) Signed-off-by: Hugh Dickins Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- mm/memory.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/mm/memory.c b/mm/memory.c index 5780707589052..3df1f05e76b8e 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -637,15 +637,11 @@ follow_page(struct mm_struct *mm, unsigned long address, int write) if (pte_present(pte)) { if (write && !pte_write(pte)) goto out; - if (write && !pte_dirty(pte)) { - struct page *page = pte_page(pte); - if (!PageDirty(page)) - set_page_dirty(page); - } pfn = pte_pfn(pte); if (pfn_valid(pfn)) { - struct page *page = pfn_to_page(pfn); - + page = pfn_to_page(pfn); + if (write && !pte_dirty(pte) && !PageDirty(page)) + set_page_dirty(page); mark_page_accessed(page); return page; } -- 2.53.0