summaryrefslogtreecommitdiffstats
path: root/mm/hugetlb.c
diff options
context:
space:
mode:
authorJani Nikula <jani.nikula@intel.com>2017-09-04 21:40:34 +0300
committerJani Nikula <jani.nikula@intel.com>2017-09-04 21:40:34 +0300
commitd149d6ae17197ce23e2cd6bc5fcdacf7b593e55e (patch)
tree2fb8d66199080f6d7b41690f6e8616ccd79a1943 /mm/hugetlb.c
parentafe722bee4bf8afc88c6ff7d6f781515d9428595 (diff)
parent7846b12fe0b5feab5446d892f41b5140c1419109 (diff)
downloadlinux-d149d6ae17197ce23e2cd6bc5fcdacf7b593e55e.tar.bz2
Merge drm-upstream/drm-next into drm-intel-next-queued
Catch up with upstream while it's easy. Signed-off-by: Jani Nikula <jani.nikula@intel.com>
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:
return ret;
out_release_unlock:
spin_unlock(ptl);
-out_release_nounlock:
if (vm_shared)
unlock_page(page);
+out_release_nounlock:
put_page(page);
goto out;
}
@@ -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