diff options
Diffstat (limited to 'mm/hugetlb.c')
-rw-r--r-- | mm/hugetlb.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index da8a211414c9..e93bd63462f0 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
@@ -40,14 +40,16 @@ static struct page *dequeue_huge_page(void) | |||
40 | { | 40 | { |
41 | int nid = numa_node_id(); | 41 | int nid = numa_node_id(); |
42 | struct page *page = NULL; | 42 | struct page *page = NULL; |
43 | struct zonelist *zonelist = NODE_DATA(nid)->node_zonelists; | ||
44 | struct zone **z; | ||
43 | 45 | ||
44 | if (list_empty(&hugepage_freelists[nid])) { | 46 | for (z = zonelist->zones; *z; z++) { |
45 | for (nid = 0; nid < MAX_NUMNODES; ++nid) | 47 | nid = (*z)->zone_pgdat->node_id; |
46 | if (!list_empty(&hugepage_freelists[nid])) | 48 | if (!list_empty(&hugepage_freelists[nid])) |
47 | break; | 49 | break; |
48 | } | 50 | } |
49 | if (nid >= 0 && nid < MAX_NUMNODES && | 51 | |
50 | !list_empty(&hugepage_freelists[nid])) { | 52 | if (*z) { |
51 | page = list_entry(hugepage_freelists[nid].next, | 53 | page = list_entry(hugepage_freelists[nid].next, |
52 | struct page, lru); | 54 | struct page, lru); |
53 | list_del(&page->lru); | 55 | list_del(&page->lru); |