|
@@ -79,6 +79,8 @@ extern void mem_cgroup_uncharge_cache_page(struct page *page);
|
|
|
|
|
|
extern void mem_cgroup_out_of_memory(struct mem_cgroup *memcg, gfp_t gfp_mask,
|
|
extern void mem_cgroup_out_of_memory(struct mem_cgroup *memcg, gfp_t gfp_mask,
|
|
int order);
|
|
int order);
|
|
|
|
+bool __mem_cgroup_same_or_subtree(const struct mem_cgroup *root_memcg,
|
|
|
|
+ struct mem_cgroup *memcg);
|
|
int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *memcg);
|
|
int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *memcg);
|
|
|
|
|
|
extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page);
|
|
extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page);
|
|
@@ -92,10 +94,13 @@ static inline
|
|
int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup)
|
|
int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup)
|
|
{
|
|
{
|
|
struct mem_cgroup *memcg;
|
|
struct mem_cgroup *memcg;
|
|
|
|
+ int match;
|
|
|
|
+
|
|
rcu_read_lock();
|
|
rcu_read_lock();
|
|
memcg = mem_cgroup_from_task(rcu_dereference((mm)->owner));
|
|
memcg = mem_cgroup_from_task(rcu_dereference((mm)->owner));
|
|
|
|
+ match = __mem_cgroup_same_or_subtree(cgroup, memcg);
|
|
rcu_read_unlock();
|
|
rcu_read_unlock();
|
|
- return cgroup == memcg;
|
|
|
|
|
|
+ return match;
|
|
}
|
|
}
|
|
|
|
|
|
extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *memcg);
|
|
extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *memcg);
|