diff options
Diffstat (limited to 'mm/hugetlb.c')
-rw-r--r-- | mm/hugetlb.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 388c2bb9b55c..c1f3c0be150a 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
@@ -1030,6 +1030,7 @@ static void destroy_compound_gigantic_page(struct page *page, | |||
1030 | int nr_pages = 1 << order; | 1030 | int nr_pages = 1 << order; |
1031 | struct page *p = page + 1; | 1031 | struct page *p = page + 1; |
1032 | 1032 | ||
1033 | atomic_set(compound_mapcount_ptr(page), 0); | ||
1033 | for (i = 1; i < nr_pages; i++, p = mem_map_next(p, page, i)) { | 1034 | for (i = 1; i < nr_pages; i++, p = mem_map_next(p, page, i)) { |
1034 | clear_compound_head(p); | 1035 | clear_compound_head(p); |
1035 | set_page_refcounted(p); | 1036 | set_page_refcounted(p); |
@@ -4228,7 +4229,6 @@ pte_t *huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud) | |||
4228 | if (saddr) { | 4229 | if (saddr) { |
4229 | spte = huge_pte_offset(svma->vm_mm, saddr); | 4230 | spte = huge_pte_offset(svma->vm_mm, saddr); |
4230 | if (spte) { | 4231 | if (spte) { |
4231 | mm_inc_nr_pmds(mm); | ||
4232 | get_page(virt_to_page(spte)); | 4232 | get_page(virt_to_page(spte)); |
4233 | break; | 4233 | break; |
4234 | } | 4234 | } |
@@ -4243,9 +4243,9 @@ pte_t *huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud) | |||
4243 | if (pud_none(*pud)) { | 4243 | if (pud_none(*pud)) { |
4244 | pud_populate(mm, pud, | 4244 | pud_populate(mm, pud, |
4245 | (pmd_t *)((unsigned long)spte & PAGE_MASK)); | 4245 | (pmd_t *)((unsigned long)spte & PAGE_MASK)); |
4246 | mm_inc_nr_pmds(mm); | ||
4246 | } else { | 4247 | } else { |
4247 | put_page(virt_to_page(spte)); | 4248 | put_page(virt_to_page(spte)); |
4248 | mm_inc_nr_pmds(mm); | ||
4249 | } | 4249 | } |
4250 | spin_unlock(ptl); | 4250 | spin_unlock(ptl); |
4251 | out: | 4251 | out: |