summaryrefslogtreecommitdiffstats
path: root/mm/hugetlb.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/hugetlb.c')
-rw-r--r--mm/hugetlb.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index bc48ee783dd9..31e207cb399b 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -4062,9 +4062,9 @@ out:
4062 return ret; 4062 return ret;
4063out_release_unlock: 4063out_release_unlock:
4064 spin_unlock(ptl); 4064 spin_unlock(ptl);
4065out_release_nounlock:
4066 if (vm_shared) 4065 if (vm_shared)
4067 unlock_page(page); 4066 unlock_page(page);
4067out_release_nounlock:
4068 put_page(page); 4068 put_page(page);
4069 goto out; 4069 goto out;
4070} 4070}
@@ -4078,6 +4078,7 @@ long follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,
4078 unsigned long vaddr = *position; 4078 unsigned long vaddr = *position;
4079 unsigned long remainder = *nr_pages; 4079 unsigned long remainder = *nr_pages;
4080 struct hstate *h = hstate_vma(vma); 4080 struct hstate *h = hstate_vma(vma);
4081 int err = -EFAULT;
4081 4082
4082 while (vaddr < vma->vm_end && remainder) { 4083 while (vaddr < vma->vm_end && remainder) {
4083 pte_t *pte; 4084 pte_t *pte;
@@ -4154,11 +4155,7 @@ long follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,
4154 } 4155 }
4155 ret = hugetlb_fault(mm, vma, vaddr, fault_flags); 4156 ret = hugetlb_fault(mm, vma, vaddr, fault_flags);
4156 if (ret & VM_FAULT_ERROR) { 4157 if (ret & VM_FAULT_ERROR) {
4157 int err = vm_fault_to_errno(ret, flags); 4158 err = vm_fault_to_errno(ret, flags);
4158
4159 if (err)
4160 return err;
4161
4162 remainder = 0; 4159 remainder = 0;
4163 break; 4160 break;
4164 } 4161 }
@@ -4213,7 +4210,7 @@ same_page:
4213 */ 4210 */
4214 *position = vaddr; 4211 *position = vaddr;
4215 4212
4216 return i ? i : -EFAULT; 4213 return i ? i : err;
4217} 4214}
4218 4215
4219#ifndef __HAVE_ARCH_FLUSH_HUGETLB_TLB_RANGE 4216#ifndef __HAVE_ARCH_FLUSH_HUGETLB_TLB_RANGE