diff options
Diffstat (limited to 'mm/vmscan.c')
-rw-r--r-- | mm/vmscan.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c index f80a5b7c057f..ef8551e0d2d0 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
@@ -1246,10 +1246,11 @@ static unsigned long shrink_zone(int priority, struct zone *zone, | |||
1246 | * If a zone is deemed to be full of pinned pages then just give it a light | 1246 | * If a zone is deemed to be full of pinned pages then just give it a light |
1247 | * scan then give up on it. | 1247 | * scan then give up on it. |
1248 | */ | 1248 | */ |
1249 | static unsigned long shrink_zones(int priority, struct zone **zones, | 1249 | static unsigned long shrink_zones(int priority, struct zonelist *zonelist, |
1250 | struct scan_control *sc) | 1250 | struct scan_control *sc) |
1251 | { | 1251 | { |
1252 | unsigned long nr_reclaimed = 0; | 1252 | unsigned long nr_reclaimed = 0; |
1253 | struct zone **zones = zonelist->zones; | ||
1253 | int i; | 1254 | int i; |
1254 | 1255 | ||
1255 | 1256 | ||
@@ -1301,8 +1302,8 @@ static unsigned long shrink_zones(int priority, struct zone **zones, | |||
1301 | * holds filesystem locks which prevent writeout this might not work, and the | 1302 | * holds filesystem locks which prevent writeout this might not work, and the |
1302 | * allocation attempt will fail. | 1303 | * allocation attempt will fail. |
1303 | */ | 1304 | */ |
1304 | static unsigned long do_try_to_free_pages(struct zone **zones, gfp_t gfp_mask, | 1305 | static unsigned long do_try_to_free_pages(struct zonelist *zonelist, |
1305 | struct scan_control *sc) | 1306 | gfp_t gfp_mask, struct scan_control *sc) |
1306 | { | 1307 | { |
1307 | int priority; | 1308 | int priority; |
1308 | int ret = 0; | 1309 | int ret = 0; |
@@ -1310,6 +1311,7 @@ static unsigned long do_try_to_free_pages(struct zone **zones, gfp_t gfp_mask, | |||
1310 | unsigned long nr_reclaimed = 0; | 1311 | unsigned long nr_reclaimed = 0; |
1311 | struct reclaim_state *reclaim_state = current->reclaim_state; | 1312 | struct reclaim_state *reclaim_state = current->reclaim_state; |
1312 | unsigned long lru_pages = 0; | 1313 | unsigned long lru_pages = 0; |
1314 | struct zone **zones = zonelist->zones; | ||
1313 | int i; | 1315 | int i; |
1314 | 1316 | ||
1315 | if (scan_global_lru(sc)) | 1317 | if (scan_global_lru(sc)) |
@@ -1333,7 +1335,7 @@ static unsigned long do_try_to_free_pages(struct zone **zones, gfp_t gfp_mask, | |||
1333 | sc->nr_scanned = 0; | 1335 | sc->nr_scanned = 0; |
1334 | if (!priority) | 1336 | if (!priority) |
1335 | disable_swap_token(); | 1337 | disable_swap_token(); |
1336 | nr_reclaimed += shrink_zones(priority, zones, sc); | 1338 | nr_reclaimed += shrink_zones(priority, zonelist, sc); |
1337 | /* | 1339 | /* |
1338 | * Don't shrink slabs when reclaiming memory from | 1340 | * Don't shrink slabs when reclaiming memory from |
1339 | * over limit cgroups | 1341 | * over limit cgroups |
@@ -1397,7 +1399,8 @@ out: | |||
1397 | return ret; | 1399 | return ret; |
1398 | } | 1400 | } |
1399 | 1401 | ||
1400 | unsigned long try_to_free_pages(struct zone **zones, int order, gfp_t gfp_mask) | 1402 | unsigned long try_to_free_pages(struct zonelist *zonelist, int order, |
1403 | gfp_t gfp_mask) | ||
1401 | { | 1404 | { |
1402 | struct scan_control sc = { | 1405 | struct scan_control sc = { |
1403 | .gfp_mask = gfp_mask, | 1406 | .gfp_mask = gfp_mask, |
@@ -1410,7 +1413,7 @@ unsigned long try_to_free_pages(struct zone **zones, int order, gfp_t gfp_mask) | |||
1410 | .isolate_pages = isolate_pages_global, | 1413 | .isolate_pages = isolate_pages_global, |
1411 | }; | 1414 | }; |
1412 | 1415 | ||
1413 | return do_try_to_free_pages(zones, gfp_mask, &sc); | 1416 | return do_try_to_free_pages(zonelist, gfp_mask, &sc); |
1414 | } | 1417 | } |
1415 | 1418 | ||
1416 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR | 1419 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR |
@@ -1428,11 +1431,11 @@ unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *mem_cont, | |||
1428 | .mem_cgroup = mem_cont, | 1431 | .mem_cgroup = mem_cont, |
1429 | .isolate_pages = mem_cgroup_isolate_pages, | 1432 | .isolate_pages = mem_cgroup_isolate_pages, |
1430 | }; | 1433 | }; |
1431 | struct zone **zones; | 1434 | struct zonelist *zonelist; |
1432 | int target_zone = gfp_zone(GFP_HIGHUSER_MOVABLE); | 1435 | int target_zone = gfp_zone(GFP_HIGHUSER_MOVABLE); |
1433 | 1436 | ||
1434 | zones = NODE_DATA(numa_node_id())->node_zonelists[target_zone].zones; | 1437 | zonelist = &NODE_DATA(numa_node_id())->node_zonelists[target_zone]; |
1435 | if (do_try_to_free_pages(zones, sc.gfp_mask, &sc)) | 1438 | if (do_try_to_free_pages(zonelist, sc.gfp_mask, &sc)) |
1436 | return 1; | 1439 | return 1; |
1437 | return 0; | 1440 | return 0; |
1438 | } | 1441 | } |