mm: introduce node_zonelist() for accessing the zonelist for a GFP mask
[linux-2.6.git] / include / linux / gfp.h
index c17ba49..e865d51 100644 (file)
@@ -154,10 +154,15 @@ static inline enum zone_type gfp_zone(gfp_t flags)
 /*
  * We get the zone list from the current node and the gfp_mask.
  * This zone list contains a maximum of MAXNODES*MAX_NR_ZONES zones.
+ * There are many zonelists per node, two for each active zone.
  *
  * For the normal case of non-DISCONTIGMEM systems the NODE_DATA() gets
  * optimized to &contig_page_data at compile-time.
  */
+static inline struct zonelist *node_zonelist(int nid, gfp_t flags)
+{
+       return NODE_DATA(nid)->node_zonelists + gfp_zone(flags);
+}
 
 #ifndef HAVE_ARCH_FREE_PAGE
 static inline void arch_free_page(struct page *page, int order) { }
@@ -178,8 +183,7 @@ static inline struct page *alloc_pages_node(int nid, gfp_t gfp_mask,
        if (nid < 0)
                nid = numa_node_id();
 
-       return __alloc_pages(gfp_mask, order,
-               NODE_DATA(nid)->node_zonelists + gfp_zone(gfp_mask));
+       return __alloc_pages(gfp_mask, order, node_zonelist(nid, gfp_mask));
 }
 
 #ifdef CONFIG_NUMA