aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2016-12-14 18:07:07 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2016-12-14 19:04:09 -0500
commit667240e0f2e13e792a5af99b3c34dfab12ef125b (patch)
treef6880fe19d639a43c05b90a7e2c3e13161e0c81e
parent0721ec8bc156fafc9057ec1df95cdb3bbc3cbae8 (diff)
mm: use passed vm_fault structure in __do_fault()
Instead of creating another vm_fault structure, use the one passed to __do_fault() for passing arguments into fault handler. Link: http://lkml.kernel.org/r/1479460644-25076-5-git-send-email-jack@suse.cz Signed-off-by: Jan Kara <jack@suse.cz> Reviewed-by: Ross Zwisler <ross.zwisler@linux.intel.com> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--mm/memory.c25
1 files changed, 10 insertions, 15 deletions
diff --git a/mm/memory.c b/mm/memory.c
index c514b4a07a7a..cbc6d47fda73 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -2848,37 +2848,31 @@ static int __do_fault(struct vm_fault *vmf, struct page *cow_page,
2848 struct page **page, void **entry) 2848 struct page **page, void **entry)
2849{ 2849{
2850 struct vm_area_struct *vma = vmf->vma; 2850 struct vm_area_struct *vma = vmf->vma;
2851 struct vm_fault vmf2;
2852 int ret; 2851 int ret;
2853 2852
2854 vmf2.address = vmf->address; 2853 vmf->cow_page = cow_page;
2855 vmf2.pgoff = vmf->pgoff;
2856 vmf2.flags = vmf->flags;
2857 vmf2.page = NULL;
2858 vmf2.gfp_mask = __get_fault_gfp_mask(vma);
2859 vmf2.cow_page = cow_page;
2860 2854
2861 ret = vma->vm_ops->fault(vma, &vmf2); 2855 ret = vma->vm_ops->fault(vma, vmf);
2862 if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE | VM_FAULT_RETRY))) 2856 if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE | VM_FAULT_RETRY)))
2863 return ret; 2857 return ret;
2864 if (ret & VM_FAULT_DAX_LOCKED) { 2858 if (ret & VM_FAULT_DAX_LOCKED) {
2865 *entry = vmf2.entry; 2859 *entry = vmf->entry;
2866 return ret; 2860 return ret;
2867 } 2861 }
2868 2862
2869 if (unlikely(PageHWPoison(vmf2.page))) { 2863 if (unlikely(PageHWPoison(vmf->page))) {
2870 if (ret & VM_FAULT_LOCKED) 2864 if (ret & VM_FAULT_LOCKED)
2871 unlock_page(vmf2.page); 2865 unlock_page(vmf->page);
2872 put_page(vmf2.page); 2866 put_page(vmf->page);
2873 return VM_FAULT_HWPOISON; 2867 return VM_FAULT_HWPOISON;
2874 } 2868 }
2875 2869
2876 if (unlikely(!(ret & VM_FAULT_LOCKED))) 2870 if (unlikely(!(ret & VM_FAULT_LOCKED)))
2877 lock_page(vmf2.page); 2871 lock_page(vmf->page);
2878 else 2872 else
2879 VM_BUG_ON_PAGE(!PageLocked(vmf2.page), vmf2.page); 2873 VM_BUG_ON_PAGE(!PageLocked(vmf->page), vmf->page);
2880 2874
2881 *page = vmf2.page; 2875 *page = vmf->page;
2882 return ret; 2876 return ret;
2883} 2877}
2884 2878
@@ -3614,6 +3608,7 @@ static int __handle_mm_fault(struct vm_area_struct *vma, unsigned long address,
3614 .address = address & PAGE_MASK, 3608 .address = address & PAGE_MASK,
3615 .flags = flags, 3609 .flags = flags,
3616 .pgoff = linear_page_index(vma, address), 3610 .pgoff = linear_page_index(vma, address),
3611 .gfp_mask = __get_fault_gfp_mask(vma),
3617 }; 3612 };
3618 struct mm_struct *mm = vma->vm_mm; 3613 struct mm_struct *mm = vma->vm_mm;
3619 pgd_t *pgd; 3614 pgd_t *pgd;