|
@@ -407,12 +407,10 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma,
|
|
|
|
|
|
ret = handle_mm_fault(vma, address, fault_flags);
|
|
|
if (ret & VM_FAULT_ERROR) {
|
|
|
- if (ret & VM_FAULT_OOM)
|
|
|
- return -ENOMEM;
|
|
|
- if (ret & (VM_FAULT_HWPOISON | VM_FAULT_HWPOISON_LARGE))
|
|
|
- return *flags & FOLL_HWPOISON ? -EHWPOISON : -EFAULT;
|
|
|
- if (ret & (VM_FAULT_SIGBUS | VM_FAULT_SIGSEGV))
|
|
|
- return -EFAULT;
|
|
|
+ int err = vm_fault_to_errno(ret, *flags);
|
|
|
+
|
|
|
+ if (err)
|
|
|
+ return err;
|
|
|
BUG();
|
|
|
}
|
|
|
|
|
@@ -723,12 +721,10 @@ retry:
|
|
|
ret = handle_mm_fault(vma, address, fault_flags);
|
|
|
major |= ret & VM_FAULT_MAJOR;
|
|
|
if (ret & VM_FAULT_ERROR) {
|
|
|
- if (ret & VM_FAULT_OOM)
|
|
|
- return -ENOMEM;
|
|
|
- if (ret & (VM_FAULT_HWPOISON | VM_FAULT_HWPOISON_LARGE))
|
|
|
- return -EHWPOISON;
|
|
|
- if (ret & (VM_FAULT_SIGBUS | VM_FAULT_SIGSEGV))
|
|
|
- return -EFAULT;
|
|
|
+ int err = vm_fault_to_errno(ret, 0);
|
|
|
+
|
|
|
+ if (err)
|
|
|
+ return err;
|
|
|
BUG();
|
|
|
}
|
|
|
|