mm: refactor inactive_file_is_low() to use get_lru_size()
An inactive file list is considered low when its active counterpart is bigger, regardless of whether it is a global zone LRU list or a memcg zone LRU list. The only difference is in how the LRU size is assessed. get_lru_size() does the right thing for both global and memcg reclaim situations. Get rid of inactive_file_is_low_global() and mem_cgroup_inactive_file_is_low() by using get_lru_size() and compare the numbers in common code. Signed-off-by: Johannes Weiner <hannes@cmpxchg.org> Acked-by: Michal Hocko <mhocko@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
860f2759d9
commit
e3790144c9
|
@ -116,7 +116,6 @@ void mem_cgroup_iter_break(struct mem_cgroup *, struct mem_cgroup *);
|
||||||
* For memory reclaim.
|
* For memory reclaim.
|
||||||
*/
|
*/
|
||||||
int mem_cgroup_inactive_anon_is_low(struct lruvec *lruvec);
|
int mem_cgroup_inactive_anon_is_low(struct lruvec *lruvec);
|
||||||
int mem_cgroup_inactive_file_is_low(struct lruvec *lruvec);
|
|
||||||
int mem_cgroup_select_victim_node(struct mem_cgroup *memcg);
|
int mem_cgroup_select_victim_node(struct mem_cgroup *memcg);
|
||||||
unsigned long mem_cgroup_get_lru_size(struct lruvec *lruvec, enum lru_list);
|
unsigned long mem_cgroup_get_lru_size(struct lruvec *lruvec, enum lru_list);
|
||||||
void mem_cgroup_update_lru_size(struct lruvec *, enum lru_list, int);
|
void mem_cgroup_update_lru_size(struct lruvec *, enum lru_list, int);
|
||||||
|
@ -321,12 +320,6 @@ mem_cgroup_inactive_anon_is_low(struct lruvec *lruvec)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
|
||||||
mem_cgroup_inactive_file_is_low(struct lruvec *lruvec)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline unsigned long
|
static inline unsigned long
|
||||||
mem_cgroup_get_lru_size(struct lruvec *lruvec, enum lru_list lru)
|
mem_cgroup_get_lru_size(struct lruvec *lruvec, enum lru_list lru)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1396,17 +1396,6 @@ int mem_cgroup_inactive_anon_is_low(struct lruvec *lruvec)
|
||||||
return inactive * inactive_ratio < active;
|
return inactive * inactive_ratio < active;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mem_cgroup_inactive_file_is_low(struct lruvec *lruvec)
|
|
||||||
{
|
|
||||||
unsigned long active;
|
|
||||||
unsigned long inactive;
|
|
||||||
|
|
||||||
inactive = mem_cgroup_get_lru_size(lruvec, LRU_INACTIVE_FILE);
|
|
||||||
active = mem_cgroup_get_lru_size(lruvec, LRU_ACTIVE_FILE);
|
|
||||||
|
|
||||||
return (active > inactive);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define mem_cgroup_from_res_counter(counter, member) \
|
#define mem_cgroup_from_res_counter(counter, member) \
|
||||||
container_of(counter, struct mem_cgroup, member)
|
container_of(counter, struct mem_cgroup, member)
|
||||||
|
|
||||||
|
|
19
mm/vmscan.c
19
mm/vmscan.c
|
@ -1579,16 +1579,6 @@ static inline int inactive_anon_is_low(struct lruvec *lruvec)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int inactive_file_is_low_global(struct zone *zone)
|
|
||||||
{
|
|
||||||
unsigned long active, inactive;
|
|
||||||
|
|
||||||
active = zone_page_state(zone, NR_ACTIVE_FILE);
|
|
||||||
inactive = zone_page_state(zone, NR_INACTIVE_FILE);
|
|
||||||
|
|
||||||
return (active > inactive);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* inactive_file_is_low - check if file pages need to be deactivated
|
* inactive_file_is_low - check if file pages need to be deactivated
|
||||||
* @lruvec: LRU vector to check
|
* @lruvec: LRU vector to check
|
||||||
|
@ -1605,10 +1595,13 @@ static int inactive_file_is_low_global(struct zone *zone)
|
||||||
*/
|
*/
|
||||||
static int inactive_file_is_low(struct lruvec *lruvec)
|
static int inactive_file_is_low(struct lruvec *lruvec)
|
||||||
{
|
{
|
||||||
if (!mem_cgroup_disabled())
|
unsigned long inactive;
|
||||||
return mem_cgroup_inactive_file_is_low(lruvec);
|
unsigned long active;
|
||||||
|
|
||||||
return inactive_file_is_low_global(lruvec_zone(lruvec));
|
inactive = get_lru_size(lruvec, LRU_INACTIVE_FILE);
|
||||||
|
active = get_lru_size(lruvec, LRU_ACTIVE_FILE);
|
||||||
|
|
||||||
|
return active > inactive;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int inactive_list_is_low(struct lruvec *lruvec, enum lru_list lru)
|
static int inactive_list_is_low(struct lruvec *lruvec, enum lru_list lru)
|
||||||
|
|
Loading…
Reference in a new issue