vserver 1.9.5.x5
[linux-2.6.git] / mm / hugetlb.c
index 6c522e1..4eb5ae3 100644 (file)
@@ -10,6 +10,7 @@
 #include <linux/hugetlb.h>
 #include <linux/sysctl.h>
 #include <linux/highmem.h>
+#include <linux/nodemask.h>
 
 const unsigned long hugetlb_zero = 0, hugetlb_infinity = ~0UL;
 static unsigned long nr_huge_pages, free_huge_pages;
@@ -17,11 +18,11 @@ unsigned long max_huge_pages;
 static struct list_head hugepage_freelists[MAX_NUMNODES];
 static unsigned int nr_huge_pages_node[MAX_NUMNODES];
 static unsigned int free_huge_pages_node[MAX_NUMNODES];
-static spinlock_t hugetlb_lock = SPIN_LOCK_UNLOCKED;
+static DEFINE_SPINLOCK(hugetlb_lock);
 
 static void enqueue_huge_page(struct page *page)
 {
-       int nid = page_zone(page)->zone_pgdat->node_id;
+       int nid = page_to_nid(page);
        list_add(&page->lru, &hugepage_freelists[nid]);
        free_huge_pages++;
        free_huge_pages_node[nid]++;
@@ -52,12 +53,12 @@ static struct page *alloc_fresh_huge_page(void)
 {
        static int nid = 0;
        struct page *page;
-       page = alloc_pages_node(nid, GFP_HIGHUSER|__GFP_COMP,
+       page = alloc_pages_node(nid, GFP_HIGHUSER|__GFP_COMP|__GFP_NOWARN,
                                        HUGETLB_PAGE_ORDER);
-       nid = (nid + 1) % numnodes;
+       nid = (nid + 1) % num_online_nodes();
        if (page) {
                nr_huge_pages++;
-               nr_huge_pages_node[page_zone(page)->zone_pgdat->node_id]++;
+               nr_huge_pages_node[page_to_nid(page)]++;
        }
        return page;
 }
@@ -123,6 +124,7 @@ static int __init hugetlb_setup(char *s)
 }
 __setup("hugepages=", hugetlb_setup);
 
+#ifdef CONFIG_SYSCTL
 static void update_and_free_page(struct page *page)
 {
        int i;
@@ -188,7 +190,6 @@ static unsigned long set_max_huge_pages(unsigned long count)
        return nr_huge_pages;
 }
 
-#ifdef CONFIG_SYSCTL
 int hugetlb_sysctl_handler(struct ctl_table *table, int write,
                           struct file *file, void __user *buffer,
                           size_t *length, loff_t *ppos)