|
@@ -513,6 +513,16 @@ static int adjust_pool_surplus(int delta)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+static void prep_new_huge_page(struct page *page, int nid)
|
|
|
+{
|
|
|
+ set_compound_page_dtor(page, free_huge_page);
|
|
|
+ spin_lock(&hugetlb_lock);
|
|
|
+ nr_huge_pages++;
|
|
|
+ nr_huge_pages_node[nid]++;
|
|
|
+ spin_unlock(&hugetlb_lock);
|
|
|
+ put_page(page); /* free it into the hugepage allocator */
|
|
|
+}
|
|
|
+
|
|
|
static struct page *alloc_fresh_huge_page_node(int nid)
|
|
|
{
|
|
|
struct page *page;
|
|
@@ -526,12 +536,7 @@ static struct page *alloc_fresh_huge_page_node(int nid)
|
|
|
__free_pages(page, HUGETLB_PAGE_ORDER);
|
|
|
return NULL;
|
|
|
}
|
|
|
- set_compound_page_dtor(page, free_huge_page);
|
|
|
- spin_lock(&hugetlb_lock);
|
|
|
- nr_huge_pages++;
|
|
|
- nr_huge_pages_node[nid]++;
|
|
|
- spin_unlock(&hugetlb_lock);
|
|
|
- put_page(page); /* free it into the hugepage allocator */
|
|
|
+ prep_new_huge_page(page, nid);
|
|
|
}
|
|
|
|
|
|
return page;
|