diff options
Diffstat (limited to 'mm/page_alloc.c')
| -rw-r--r-- | mm/page_alloc.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 580a5f075ed0..5248fe070aa4 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
| @@ -1816,7 +1816,7 @@ static void zlc_clear_zones_full(struct zonelist *zonelist) | |||
| 1816 | 1816 | ||
| 1817 | static bool zone_local(struct zone *local_zone, struct zone *zone) | 1817 | static bool zone_local(struct zone *local_zone, struct zone *zone) |
| 1818 | { | 1818 | { |
| 1819 | return node_distance(local_zone->node, zone->node) == LOCAL_DISTANCE; | 1819 | return local_zone->node == zone->node; |
| 1820 | } | 1820 | } |
| 1821 | 1821 | ||
| 1822 | static bool zone_allows_reclaim(struct zone *local_zone, struct zone *zone) | 1822 | static bool zone_allows_reclaim(struct zone *local_zone, struct zone *zone) |
| @@ -1913,18 +1913,17 @@ zonelist_scan: | |||
| 1913 | * page was allocated in should have no effect on the | 1913 | * page was allocated in should have no effect on the |
| 1914 | * time the page has in memory before being reclaimed. | 1914 | * time the page has in memory before being reclaimed. |
| 1915 | * | 1915 | * |
| 1916 | * When zone_reclaim_mode is enabled, try to stay in | 1916 | * Try to stay in local zones in the fastpath. If |
| 1917 | * local zones in the fastpath. If that fails, the | 1917 | * that fails, the slowpath is entered, which will do |
| 1918 | * slowpath is entered, which will do another pass | 1918 | * another pass starting with the local zones, but |
| 1919 | * starting with the local zones, but ultimately fall | 1919 | * ultimately fall back to remote zones that do not |
| 1920 | * back to remote zones that do not partake in the | 1920 | * partake in the fairness round-robin cycle of this |
| 1921 | * fairness round-robin cycle of this zonelist. | 1921 | * zonelist. |
| 1922 | */ | 1922 | */ |
| 1923 | if (alloc_flags & ALLOC_WMARK_LOW) { | 1923 | if (alloc_flags & ALLOC_WMARK_LOW) { |
| 1924 | if (zone_page_state(zone, NR_ALLOC_BATCH) <= 0) | 1924 | if (zone_page_state(zone, NR_ALLOC_BATCH) <= 0) |
| 1925 | continue; | 1925 | continue; |
| 1926 | if (zone_reclaim_mode && | 1926 | if (!zone_local(preferred_zone, zone)) |
| 1927 | !zone_local(preferred_zone, zone)) | ||
| 1928 | continue; | 1927 | continue; |
| 1929 | } | 1928 | } |
| 1930 | /* | 1929 | /* |
| @@ -2390,7 +2389,7 @@ static void prepare_slowpath(gfp_t gfp_mask, unsigned int order, | |||
| 2390 | * thrash fairness information for zones that are not | 2389 | * thrash fairness information for zones that are not |
| 2391 | * actually part of this zonelist's round-robin cycle. | 2390 | * actually part of this zonelist's round-robin cycle. |
| 2392 | */ | 2391 | */ |
| 2393 | if (zone_reclaim_mode && !zone_local(preferred_zone, zone)) | 2392 | if (!zone_local(preferred_zone, zone)) |
| 2394 | continue; | 2393 | continue; |
| 2395 | mod_zone_page_state(zone, NR_ALLOC_BATCH, | 2394 | mod_zone_page_state(zone, NR_ALLOC_BATCH, |
| 2396 | high_wmark_pages(zone) - | 2395 | high_wmark_pages(zone) - |
