aboutsummaryrefslogtreecommitdiffstats
path: root/mm/vmscan.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/vmscan.c')
-rw-r--r--mm/vmscan.c21
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 */
1249static unsigned long shrink_zones(int priority, struct zone **zones, 1249static 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 */
1304static unsigned long do_try_to_free_pages(struct zone **zones, gfp_t gfp_mask, 1305static 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
1400unsigned long try_to_free_pages(struct zone **zones, int order, gfp_t gfp_mask) 1402unsigned 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}