From 0b414e844e90e0b728f7b45458152f9fd60bdd3d Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Thu, 26 Jun 2014 10:42:43 +1000 Subject: [PATCH] mm-introduce-do_shared_fault-and-drop-do_fault-fix-fix add comment which may not be true :( Cc: Andi Kleen Cc: Bob Liu Cc: Dave Hansen Cc: Kirill A. Shutemov Cc: Matthew Wilcox Cc: Mel Gorman Cc: Naoya Horiguchi Cc: Rik van Riel Cc: Sasha Levin Signed-off-by: Andrew Morton --- mm/memory.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mm/memory.c b/mm/memory.c index a90bafb4d9c3..e119a8bf7b05 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -3000,6 +3000,12 @@ static int do_shared_fault(struct mm_struct *mm, struct vm_area_struct *vma, if (set_page_dirty(fault_page)) dirtied = 1; + /* + * Take a local copy of the address_space - page.mapping may be zeroed + * by truncate after unlock_page(). The address_space itself remains + * pinned by vma->vm_file's reference. We rely on unlock_page()'s + * release semantics to prevent the compiler from undoing this copying. + */ mapping = fault_page->mapping; unlock_page(fault_page); if ((dirtied || vma->vm_ops->page_mkwrite) && mapping) { -- 2.39.5