aboutsummaryrefslogtreecommitdiffstats
path: root/mm/page_alloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r--mm/page_alloc.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 14d7032c1d12..3974fd81d27c 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -806,11 +806,14 @@ __alloc_pages(unsigned int __nocast gfp_mask, unsigned int order,
806 classzone_idx = zone_idx(zones[0]); 806 classzone_idx = zone_idx(zones[0]);
807 807
808restart: 808restart:
809 /* Go through the zonelist once, looking for a zone with enough free */ 809 /*
810 * Go through the zonelist once, looking for a zone with enough free.
811 * See also cpuset_zone_allowed() comment in kernel/cpuset.c.
812 */
810 for (i = 0; (z = zones[i]) != NULL; i++) { 813 for (i = 0; (z = zones[i]) != NULL; i++) {
811 int do_reclaim = should_reclaim_zone(z, gfp_mask); 814 int do_reclaim = should_reclaim_zone(z, gfp_mask);
812 815
813 if (!cpuset_zone_allowed(z)) 816 if (!cpuset_zone_allowed(z, __GFP_HARDWALL))
814 continue; 817 continue;
815 818
816 /* 819 /*
@@ -845,6 +848,7 @@ zone_reclaim_retry:
845 * 848 *
846 * This is the last chance, in general, before the goto nopage. 849 * This is the last chance, in general, before the goto nopage.
847 * Ignore cpuset if GFP_ATOMIC (!wait) rather than fail alloc. 850 * Ignore cpuset if GFP_ATOMIC (!wait) rather than fail alloc.
851 * See also cpuset_zone_allowed() comment in kernel/cpuset.c.
848 */ 852 */
849 for (i = 0; (z = zones[i]) != NULL; i++) { 853 for (i = 0; (z = zones[i]) != NULL; i++) {
850 if (!zone_watermark_ok(z, order, z->pages_min, 854 if (!zone_watermark_ok(z, order, z->pages_min,
@@ -852,7 +856,7 @@ zone_reclaim_retry:
852 gfp_mask & __GFP_HIGH)) 856 gfp_mask & __GFP_HIGH))
853 continue; 857 continue;
854 858
855 if (wait && !cpuset_zone_allowed(z)) 859 if (wait && !cpuset_zone_allowed(z, gfp_mask))
856 continue; 860 continue;
857 861
858 page = buffered_rmqueue(z, order, gfp_mask); 862 page = buffered_rmqueue(z, order, gfp_mask);
@@ -867,7 +871,7 @@ zone_reclaim_retry:
867 if (!(gfp_mask & __GFP_NOMEMALLOC)) { 871 if (!(gfp_mask & __GFP_NOMEMALLOC)) {
868 /* go through the zonelist yet again, ignoring mins */ 872 /* go through the zonelist yet again, ignoring mins */
869 for (i = 0; (z = zones[i]) != NULL; i++) { 873 for (i = 0; (z = zones[i]) != NULL; i++) {
870 if (!cpuset_zone_allowed(z)) 874 if (!cpuset_zone_allowed(z, gfp_mask))
871 continue; 875 continue;
872 page = buffered_rmqueue(z, order, gfp_mask); 876 page = buffered_rmqueue(z, order, gfp_mask);
873 if (page) 877 if (page)
@@ -903,7 +907,7 @@ rebalance:
903 gfp_mask & __GFP_HIGH)) 907 gfp_mask & __GFP_HIGH))
904 continue; 908 continue;
905 909
906 if (!cpuset_zone_allowed(z)) 910 if (!cpuset_zone_allowed(z, gfp_mask))
907 continue; 911 continue;
908 912
909 page = buffered_rmqueue(z, order, gfp_mask); 913 page = buffered_rmqueue(z, order, gfp_mask);
@@ -922,7 +926,7 @@ rebalance:
922 classzone_idx, 0, 0)) 926 classzone_idx, 0, 0))
923 continue; 927 continue;
924 928
925 if (!cpuset_zone_allowed(z)) 929 if (!cpuset_zone_allowed(z, __GFP_HARDWALL))
926 continue; 930 continue;
927 931
928 page = buffered_rmqueue(z, order, gfp_mask); 932 page = buffered_rmqueue(z, order, gfp_mask);