summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/hugetlb.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index eda9642254a..32dff4290c6 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -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;