This fixes oracle-bug 12375075.

diff -up a/mm/hugetlb.c.orig b/mm/hugetlb.c
--- a/mm/hugetlb.c.orig	2011-09-01 09:59:19.683846528 +0800
+++ b/mm/hugetlb.c	2011-09-01 10:00:00.977283135 +0800
@@ -263,7 +263,7 @@ static unsigned long set_max_huge_pages(
 		return nr_huge_pages;
 
 	spin_lock(&hugetlb_lock);
-	count = max(count, resv_huge_pages);
+	count = max(count, nr_huge_pages - free_huge_pages + resv_huge_pages);
 	try_to_free_low(count);
 	while (count < nr_huge_pages) {
 		struct page *page = dequeue_huge_page(NULL, 0);
