Al Viro observes that in the hugetlb case, handle_mm_fault() may return a value of the kind ENOSPC when its caller is expecting a value of the kind VM_FAULT_SIGBUS: fix alloc_huge_page()'s failure returns.
Unified · Split
| @@ -1033,10 +1033,10 @@ static struct page *alloc_huge_page(struct vm_area_struct *vma, · 1032 unmodified lines | ||
| 1033 | 1033 | */ |
| 1034 | 1034 | chg = vma_needs_reservation(h, vma, addr); |
| 1035 | 1035 | if (chg < 0) |
| 1036 | − return ERR_PTR(chg); | |
| 1036 | + return ERR_PTR(-VM_FAULT_OOM); | |
| 1037 | 1037 | if (chg) |
| 1038 | 1038 | if (hugetlb_get_quota(inode->i_mapping, chg)) |
| 1039 | − return ERR_PTR(-ENOSPC); | |
| 1039 | + return ERR_PTR(-VM_FAULT_SIGBUS); | |
| 1040 | 1040 | |
| 1041 | 1041 | spin_lock(&hugetlb_lock); |
| 1042 | 1042 | page = dequeue_huge_page_vma(h, vma, addr, avoid_reserve); |