|
@@ -95,8 +95,6 @@ struct scan_control {
|
|
|
/* Can pages be swapped as part of reclaim? */
|
|
|
int may_swap;
|
|
|
|
|
|
- int swappiness;
|
|
|
-
|
|
|
int order;
|
|
|
|
|
|
/*
|
|
@@ -1770,6 +1768,13 @@ static unsigned long shrink_list(enum lru_list lru, unsigned long nr_to_scan,
|
|
|
return shrink_inactive_list(nr_to_scan, zone, sc, priority, file);
|
|
|
}
|
|
|
|
|
|
+static int vmscan_swappiness(struct scan_control *sc)
|
|
|
+{
|
|
|
+ if (scanning_global_lru(sc))
|
|
|
+ return vm_swappiness;
|
|
|
+ return mem_cgroup_swappiness(sc->mem_cgroup);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Determine how aggressively the anon and file LRU lists should be
|
|
|
* scanned. The relative value of each set of LRU lists is determined
|
|
@@ -1830,8 +1835,8 @@ static void get_scan_count(struct zone *zone, struct scan_control *sc,
|
|
|
* With swappiness at 100, anonymous and file have the same priority.
|
|
|
* This scanning priority is essentially the inverse of IO cost.
|
|
|
*/
|
|
|
- anon_prio = sc->swappiness;
|
|
|
- file_prio = 200 - sc->swappiness;
|
|
|
+ anon_prio = vmscan_swappiness(sc);
|
|
|
+ file_prio = 200 - vmscan_swappiness(sc);
|
|
|
|
|
|
/*
|
|
|
* OK, so we have swap space and a fair amount of page cache
|
|
@@ -2220,7 +2225,6 @@ unsigned long try_to_free_pages(struct zonelist *zonelist, int order,
|
|
|
.nr_to_reclaim = SWAP_CLUSTER_MAX,
|
|
|
.may_unmap = 1,
|
|
|
.may_swap = 1,
|
|
|
- .swappiness = vm_swappiness,
|
|
|
.order = order,
|
|
|
.mem_cgroup = NULL,
|
|
|
.nodemask = nodemask,
|
|
@@ -2244,7 +2248,6 @@ unsigned long try_to_free_pages(struct zonelist *zonelist, int order,
|
|
|
|
|
|
unsigned long mem_cgroup_shrink_node_zone(struct mem_cgroup *mem,
|
|
|
gfp_t gfp_mask, bool noswap,
|
|
|
- unsigned int swappiness,
|
|
|
struct zone *zone,
|
|
|
unsigned long *nr_scanned)
|
|
|
{
|
|
@@ -2254,7 +2257,6 @@ unsigned long mem_cgroup_shrink_node_zone(struct mem_cgroup *mem,
|
|
|
.may_writepage = !laptop_mode,
|
|
|
.may_unmap = 1,
|
|
|
.may_swap = !noswap,
|
|
|
- .swappiness = swappiness,
|
|
|
.order = 0,
|
|
|
.mem_cgroup = mem,
|
|
|
};
|
|
@@ -2283,8 +2285,7 @@ unsigned long mem_cgroup_shrink_node_zone(struct mem_cgroup *mem,
|
|
|
|
|
|
unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *mem_cont,
|
|
|
gfp_t gfp_mask,
|
|
|
- bool noswap,
|
|
|
- unsigned int swappiness)
|
|
|
+ bool noswap)
|
|
|
{
|
|
|
struct zonelist *zonelist;
|
|
|
unsigned long nr_reclaimed;
|
|
@@ -2294,7 +2295,6 @@ unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *mem_cont,
|
|
|
.may_unmap = 1,
|
|
|
.may_swap = !noswap,
|
|
|
.nr_to_reclaim = SWAP_CLUSTER_MAX,
|
|
|
- .swappiness = swappiness,
|
|
|
.order = 0,
|
|
|
.mem_cgroup = mem_cont,
|
|
|
.nodemask = NULL, /* we don't care the placement */
|
|
@@ -2445,7 +2445,6 @@ static unsigned long balance_pgdat(pg_data_t *pgdat, int order,
|
|
|
* we want to put equal scanning pressure on each zone.
|
|
|
*/
|
|
|
.nr_to_reclaim = ULONG_MAX,
|
|
|
- .swappiness = vm_swappiness,
|
|
|
.order = order,
|
|
|
.mem_cgroup = NULL,
|
|
|
};
|
|
@@ -2915,7 +2914,6 @@ unsigned long shrink_all_memory(unsigned long nr_to_reclaim)
|
|
|
.may_writepage = 1,
|
|
|
.nr_to_reclaim = nr_to_reclaim,
|
|
|
.hibernation_mode = 1,
|
|
|
- .swappiness = vm_swappiness,
|
|
|
.order = 0,
|
|
|
};
|
|
|
struct shrink_control shrink = {
|
|
@@ -3102,7 +3100,6 @@ static int __zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order)
|
|
|
.nr_to_reclaim = max_t(unsigned long, nr_pages,
|
|
|
SWAP_CLUSTER_MAX),
|
|
|
.gfp_mask = gfp_mask,
|
|
|
- .swappiness = vm_swappiness,
|
|
|
.order = order,
|
|
|
};
|
|
|
struct shrink_control shrink = {
|