mm, hugetlb: protect reserved pages when soft offlining a hugepage
[firefly-linux-kernel-4.4.55.git] / mm / hugetlb.c
index 5b084c7b34c6ba2232d4afcfc8729d3b87b65f5b..583db19481454d2cb04eed66b34710d99d378cc1 100644 (file)
@@ -955,10 +955,11 @@ static struct page *alloc_buddy_huge_page(struct hstate *h, int nid)
  */
 struct page *alloc_huge_page_node(struct hstate *h, int nid)
 {
-       struct page *page;
+       struct page *page = NULL;
 
        spin_lock(&hugetlb_lock);
-       page = dequeue_huge_page_node(h, nid);
+       if (h->free_huge_pages - h->resv_huge_pages > 0)
+               page = dequeue_huge_page_node(h, nid);
        spin_unlock(&hugetlb_lock);
 
        if (!page)