diff options
Diffstat (limited to 'mm/hugetlb.c')
| -rw-r--r-- | mm/hugetlb.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index b21d78c941b5..67f29516662a 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
| @@ -107,7 +107,7 @@ struct page *alloc_huge_page(struct vm_area_struct *vma, unsigned long addr) | |||
| 107 | set_page_count(page, 1); | 107 | set_page_count(page, 1); |
| 108 | page[1].mapping = (void *)free_huge_page; | 108 | page[1].mapping = (void *)free_huge_page; |
| 109 | for (i = 0; i < (HPAGE_SIZE/PAGE_SIZE); ++i) | 109 | for (i = 0; i < (HPAGE_SIZE/PAGE_SIZE); ++i) |
| 110 | clear_highpage(&page[i]); | 110 | clear_user_highpage(&page[i], addr); |
| 111 | return page; | 111 | return page; |
| 112 | } | 112 | } |
| 113 | 113 | ||
| @@ -391,12 +391,7 @@ static int hugetlb_cow(struct mm_struct *mm, struct vm_area_struct *vma, | |||
| 391 | 391 | ||
| 392 | if (!new_page) { | 392 | if (!new_page) { |
| 393 | page_cache_release(old_page); | 393 | page_cache_release(old_page); |
| 394 | 394 | return VM_FAULT_OOM; | |
| 395 | /* Logically this is OOM, not a SIGBUS, but an OOM | ||
| 396 | * could cause the kernel to go killing other | ||
| 397 | * processes which won't help the hugepage situation | ||
| 398 | * at all (?) */ | ||
| 399 | return VM_FAULT_SIGBUS; | ||
| 400 | } | 395 | } |
| 401 | 396 | ||
| 402 | spin_unlock(&mm->page_table_lock); | 397 | spin_unlock(&mm->page_table_lock); |
| @@ -444,6 +439,7 @@ retry: | |||
| 444 | page = alloc_huge_page(vma, address); | 439 | page = alloc_huge_page(vma, address); |
| 445 | if (!page) { | 440 | if (!page) { |
| 446 | hugetlb_put_quota(mapping); | 441 | hugetlb_put_quota(mapping); |
| 442 | ret = VM_FAULT_OOM; | ||
| 447 | goto out; | 443 | goto out; |
| 448 | } | 444 | } |
| 449 | 445 | ||
