diff options
Diffstat (limited to 'mm/vmscan.c')
-rw-r--r-- | mm/vmscan.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c index 46f7a71ed13b..9f6e673efba7 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
@@ -2229,8 +2229,7 @@ static inline void init_tlb_ubc(void) | |||
2229 | static void shrink_node_memcg(struct pglist_data *pgdat, struct mem_cgroup *memcg, | 2229 | static void shrink_node_memcg(struct pglist_data *pgdat, struct mem_cgroup *memcg, |
2230 | struct scan_control *sc, unsigned long *lru_pages) | 2230 | struct scan_control *sc, unsigned long *lru_pages) |
2231 | { | 2231 | { |
2232 | struct zone *zone = &pgdat->node_zones[sc->reclaim_idx]; | 2232 | struct lruvec *lruvec = mem_cgroup_lruvec(pgdat, memcg); |
2233 | struct lruvec *lruvec = mem_cgroup_lruvec(pgdat, zone, memcg); | ||
2234 | unsigned long nr[NR_LRU_LISTS]; | 2233 | unsigned long nr[NR_LRU_LISTS]; |
2235 | unsigned long targets[NR_LRU_LISTS]; | 2234 | unsigned long targets[NR_LRU_LISTS]; |
2236 | unsigned long nr_to_scan; | 2235 | unsigned long nr_to_scan; |
@@ -2439,7 +2438,7 @@ static bool shrink_node(pg_data_t *pgdat, struct scan_control *sc, | |||
2439 | do { | 2438 | do { |
2440 | struct mem_cgroup *root = sc->target_mem_cgroup; | 2439 | struct mem_cgroup *root = sc->target_mem_cgroup; |
2441 | struct mem_cgroup_reclaim_cookie reclaim = { | 2440 | struct mem_cgroup_reclaim_cookie reclaim = { |
2442 | .zone = &pgdat->node_zones[classzone_idx], | 2441 | .pgdat = pgdat, |
2443 | .priority = sc->priority, | 2442 | .priority = sc->priority, |
2444 | }; | 2443 | }; |
2445 | unsigned long node_lru_pages = 0; | 2444 | unsigned long node_lru_pages = 0; |
@@ -2647,7 +2646,7 @@ static void shrink_zones(struct zonelist *zonelist, struct scan_control *sc) | |||
2647 | * and balancing, not for a memcg's limit. | 2646 | * and balancing, not for a memcg's limit. |
2648 | */ | 2647 | */ |
2649 | nr_soft_scanned = 0; | 2648 | nr_soft_scanned = 0; |
2650 | nr_soft_reclaimed = mem_cgroup_soft_limit_reclaim(zone, | 2649 | nr_soft_reclaimed = mem_cgroup_soft_limit_reclaim(zone->zone_pgdat, |
2651 | sc->order, sc->gfp_mask, | 2650 | sc->order, sc->gfp_mask, |
2652 | &nr_soft_scanned); | 2651 | &nr_soft_scanned); |
2653 | sc->nr_reclaimed += nr_soft_reclaimed; | 2652 | sc->nr_reclaimed += nr_soft_reclaimed; |
@@ -2917,7 +2916,7 @@ unsigned long try_to_free_pages(struct zonelist *zonelist, int order, | |||
2917 | 2916 | ||
2918 | unsigned long mem_cgroup_shrink_node(struct mem_cgroup *memcg, | 2917 | unsigned long mem_cgroup_shrink_node(struct mem_cgroup *memcg, |
2919 | gfp_t gfp_mask, bool noswap, | 2918 | gfp_t gfp_mask, bool noswap, |
2920 | struct zone *zone, | 2919 | pg_data_t *pgdat, |
2921 | unsigned long *nr_scanned) | 2920 | unsigned long *nr_scanned) |
2922 | { | 2921 | { |
2923 | struct scan_control sc = { | 2922 | struct scan_control sc = { |
@@ -2944,7 +2943,7 @@ unsigned long mem_cgroup_shrink_node(struct mem_cgroup *memcg, | |||
2944 | * will pick up pages from other mem cgroup's as well. We hack | 2943 | * will pick up pages from other mem cgroup's as well. We hack |
2945 | * the priority and make it zero. | 2944 | * the priority and make it zero. |
2946 | */ | 2945 | */ |
2947 | shrink_node_memcg(zone->zone_pgdat, memcg, &sc, &lru_pages); | 2946 | shrink_node_memcg(pgdat, memcg, &sc, &lru_pages); |
2948 | 2947 | ||
2949 | trace_mm_vmscan_memcg_softlimit_reclaim_end(sc.nr_reclaimed); | 2948 | trace_mm_vmscan_memcg_softlimit_reclaim_end(sc.nr_reclaimed); |
2950 | 2949 | ||
@@ -2994,7 +2993,7 @@ unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *memcg, | |||
2994 | #endif | 2993 | #endif |
2995 | 2994 | ||
2996 | static void age_active_anon(struct pglist_data *pgdat, | 2995 | static void age_active_anon(struct pglist_data *pgdat, |
2997 | struct zone *zone, struct scan_control *sc) | 2996 | struct scan_control *sc) |
2998 | { | 2997 | { |
2999 | struct mem_cgroup *memcg; | 2998 | struct mem_cgroup *memcg; |
3000 | 2999 | ||
@@ -3003,7 +3002,7 @@ static void age_active_anon(struct pglist_data *pgdat, | |||
3003 | 3002 | ||
3004 | memcg = mem_cgroup_iter(NULL, NULL, NULL); | 3003 | memcg = mem_cgroup_iter(NULL, NULL, NULL); |
3005 | do { | 3004 | do { |
3006 | struct lruvec *lruvec = mem_cgroup_lruvec(pgdat, zone, memcg); | 3005 | struct lruvec *lruvec = mem_cgroup_lruvec(pgdat, memcg); |
3007 | 3006 | ||
3008 | if (inactive_list_is_low(lruvec, false)) | 3007 | if (inactive_list_is_low(lruvec, false)) |
3009 | shrink_active_list(SWAP_CLUSTER_MAX, lruvec, | 3008 | shrink_active_list(SWAP_CLUSTER_MAX, lruvec, |
@@ -3193,7 +3192,7 @@ static int balance_pgdat(pg_data_t *pgdat, int order, int classzone_idx) | |||
3193 | * pages are rotated regardless of classzone as this is | 3192 | * pages are rotated regardless of classzone as this is |
3194 | * about consistent aging. | 3193 | * about consistent aging. |
3195 | */ | 3194 | */ |
3196 | age_active_anon(pgdat, &pgdat->node_zones[MAX_NR_ZONES - 1], &sc); | 3195 | age_active_anon(pgdat, &sc); |
3197 | 3196 | ||
3198 | /* | 3197 | /* |
3199 | * If we're getting trouble reclaiming, start doing writepage | 3198 | * If we're getting trouble reclaiming, start doing writepage |
@@ -3205,7 +3204,7 @@ static int balance_pgdat(pg_data_t *pgdat, int order, int classzone_idx) | |||
3205 | /* Call soft limit reclaim before calling shrink_node. */ | 3204 | /* Call soft limit reclaim before calling shrink_node. */ |
3206 | sc.nr_scanned = 0; | 3205 | sc.nr_scanned = 0; |
3207 | nr_soft_scanned = 0; | 3206 | nr_soft_scanned = 0; |
3208 | nr_soft_reclaimed = mem_cgroup_soft_limit_reclaim(zone, sc.order, | 3207 | nr_soft_reclaimed = mem_cgroup_soft_limit_reclaim(pgdat, sc.order, |
3209 | sc.gfp_mask, &nr_soft_scanned); | 3208 | sc.gfp_mask, &nr_soft_scanned); |
3210 | sc.nr_reclaimed += nr_soft_reclaimed; | 3209 | sc.nr_reclaimed += nr_soft_reclaimed; |
3211 | 3210 | ||