diff options
Diffstat (limited to 'include/linux/memcontrol.h')
| -rw-r--r-- | include/linux/memcontrol.h | 31 | 
1 files changed, 21 insertions, 10 deletions
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index e1644a24009c..d3c8203cab6c 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -615,28 +615,32 @@ static inline void mem_cgroup_protection(struct mem_cgroup *root,  void mem_cgroup_calculate_protection(struct mem_cgroup *root,  				     struct mem_cgroup *memcg); -static inline bool mem_cgroup_supports_protection(struct mem_cgroup *memcg) +static inline bool mem_cgroup_unprotected(struct mem_cgroup *target, +					  struct mem_cgroup *memcg)  {  	/*  	 * The root memcg doesn't account charges, and doesn't support -	 * protection. +	 * protection. The target memcg's protection is ignored, see +	 * mem_cgroup_calculate_protection() and mem_cgroup_protection()  	 */ -	return !mem_cgroup_disabled() && !mem_cgroup_is_root(memcg); - +	return mem_cgroup_disabled() || mem_cgroup_is_root(memcg) || +		memcg == target;  } -static inline bool mem_cgroup_below_low(struct mem_cgroup *memcg) +static inline bool mem_cgroup_below_low(struct mem_cgroup *target, +					struct mem_cgroup *memcg)  { -	if (!mem_cgroup_supports_protection(memcg)) +	if (mem_cgroup_unprotected(target, memcg))  		return false;  	return READ_ONCE(memcg->memory.elow) >=  		page_counter_read(&memcg->memory);  } -static inline bool mem_cgroup_below_min(struct mem_cgroup *memcg) +static inline bool mem_cgroup_below_min(struct mem_cgroup *target, +					struct mem_cgroup *memcg)  { -	if (!mem_cgroup_supports_protection(memcg)) +	if (mem_cgroup_unprotected(target, memcg))  		return false;  	return READ_ONCE(memcg->memory.emin) >= @@ -1209,12 +1213,19 @@ static inline void mem_cgroup_calculate_protection(struct mem_cgroup *root,  {  } -static inline bool mem_cgroup_below_low(struct mem_cgroup *memcg) +static inline bool mem_cgroup_unprotected(struct mem_cgroup *target, +					  struct mem_cgroup *memcg) +{ +	return true; +} +static inline bool mem_cgroup_below_low(struct mem_cgroup *target, +					struct mem_cgroup *memcg)  {  	return false;  } -static inline bool mem_cgroup_below_min(struct mem_cgroup *memcg) +static inline bool mem_cgroup_below_min(struct mem_cgroup *target, +					struct mem_cgroup *memcg)  {  	return false;  }  |