|
@@ -4078,6 +4078,7 @@ long follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,
|
|
|
unsigned long vaddr = *position;
|
|
|
unsigned long remainder = *nr_pages;
|
|
|
struct hstate *h = hstate_vma(vma);
|
|
|
+ int err = -EFAULT;
|
|
|
|
|
|
while (vaddr < vma->vm_end && remainder) {
|
|
|
pte_t *pte;
|
|
@@ -4154,11 +4155,7 @@ long follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,
|
|
|
}
|
|
|
ret = hugetlb_fault(mm, vma, vaddr, fault_flags);
|
|
|
if (ret & VM_FAULT_ERROR) {
|
|
|
- int err = vm_fault_to_errno(ret, flags);
|
|
|
-
|
|
|
- if (err)
|
|
|
- return err;
|
|
|
-
|
|
|
+ err = vm_fault_to_errno(ret, flags);
|
|
|
remainder = 0;
|
|
|
break;
|
|
|
}
|
|
@@ -4213,7 +4210,7 @@ same_page:
|
|
|
*/
|
|
|
*position = vaddr;
|
|
|
|
|
|
- return i ? i : -EFAULT;
|
|
|
+ return i ? i : err;
|
|
|
}
|
|
|
|
|
|
#ifndef __HAVE_ARCH_FLUSH_HUGETLB_TLB_RANGE
|