diff options
Diffstat (limited to 'mm/hugetlb.c')
-rw-r--r-- | mm/hugetlb.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index de4cf458d6e1..eab8c428cc93 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
@@ -42,7 +42,7 @@ static void clear_huge_page(struct page *page, unsigned long addr) | |||
42 | might_sleep(); | 42 | might_sleep(); |
43 | for (i = 0; i < (HPAGE_SIZE/PAGE_SIZE); i++) { | 43 | for (i = 0; i < (HPAGE_SIZE/PAGE_SIZE); i++) { |
44 | cond_resched(); | 44 | cond_resched(); |
45 | clear_user_highpage(page + i, addr); | 45 | clear_user_highpage(page + i, addr + i * PAGE_SIZE); |
46 | } | 46 | } |
47 | } | 47 | } |
48 | 48 | ||
@@ -71,8 +71,9 @@ static struct page *dequeue_huge_page(struct vm_area_struct *vma, | |||
71 | { | 71 | { |
72 | int nid; | 72 | int nid; |
73 | struct page *page = NULL; | 73 | struct page *page = NULL; |
74 | struct mempolicy *mpol; | ||
74 | struct zonelist *zonelist = huge_zonelist(vma, address, | 75 | struct zonelist *zonelist = huge_zonelist(vma, address, |
75 | htlb_alloc_mask); | 76 | htlb_alloc_mask, &mpol); |
76 | struct zone **z; | 77 | struct zone **z; |
77 | 78 | ||
78 | for (z = zonelist->zones; *z; z++) { | 79 | for (z = zonelist->zones; *z; z++) { |
@@ -87,6 +88,7 @@ static struct page *dequeue_huge_page(struct vm_area_struct *vma, | |||
87 | break; | 88 | break; |
88 | } | 89 | } |
89 | } | 90 | } |
91 | mpol_free(mpol); /* unref if mpol !NULL */ | ||
90 | return page; | 92 | return page; |
91 | } | 93 | } |
92 | 94 | ||