aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/memory.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/mm/memory.c b/mm/memory.c
index 706c4c4a2b8e..47fe250307c7 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -3536,10 +3536,13 @@ static vm_fault_t do_shared_fault(struct vm_fault *vmf)
3536 * but allow concurrent faults). 3536 * but allow concurrent faults).
3537 * The mmap_sem may have been released depending on flags and our 3537 * The mmap_sem may have been released depending on flags and our
3538 * return value. See filemap_fault() and __lock_page_or_retry(). 3538 * return value. See filemap_fault() and __lock_page_or_retry().
3539 * If mmap_sem is released, vma may become invalid (for example
3540 * by other thread calling munmap()).
3539 */ 3541 */
3540static vm_fault_t do_fault(struct vm_fault *vmf) 3542static vm_fault_t do_fault(struct vm_fault *vmf)
3541{ 3543{
3542 struct vm_area_struct *vma = vmf->vma; 3544 struct vm_area_struct *vma = vmf->vma;
3545 struct mm_struct *vm_mm = vma->vm_mm;
3543 vm_fault_t ret; 3546 vm_fault_t ret;
3544 3547
3545 /* 3548 /*
@@ -3580,7 +3583,7 @@ static vm_fault_t do_fault(struct vm_fault *vmf)
3580 3583
3581 /* preallocated pagetable is unused: free it */ 3584 /* preallocated pagetable is unused: free it */
3582 if (vmf->prealloc_pte) { 3585 if (vmf->prealloc_pte) {
3583 pte_free(vma->vm_mm, vmf->prealloc_pte); 3586 pte_free(vm_mm, vmf->prealloc_pte);
3584 vmf->prealloc_pte = NULL; 3587 vmf->prealloc_pte = NULL;
3585 } 3588 }
3586 return ret; 3589 return ret;