The cgroup given to mem_cgroup_page_stat() is no allowed to be NULL or the root cgroup. So there is no need to complicate the code handling those cases. Signed-off-by: Greg Thelen <gthelen@xxxxxxxxxx> --- mm/memcontrol.c | 48 ++++++++++++++++++++++-------------------------- 1 files changed, 22 insertions(+), 26 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index eb621ee..f8df350 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1364,12 +1364,10 @@ memcg_hierarchical_free_pages(struct mem_cgroup *mem) /* * mem_cgroup_page_stat() - get memory cgroup file cache statistics - * @mem: optional memory cgroup to query. If NULL, use current task's - * cgroup. + * @mem: memory cgroup to query * @item: memory statistic item exported to the kernel * - * Return the accounted statistic value or negative value if current task is - * root cgroup. + * Return the accounted statistic value. */ long mem_cgroup_page_stat(struct mem_cgroup *mem, enum mem_cgroup_nr_pages_item item) @@ -1377,29 +1375,27 @@ long mem_cgroup_page_stat(struct mem_cgroup *mem, struct mem_cgroup *iter; long value; + VM_BUG_ON(!mem); + VM_BUG_ON(mem_cgroup_is_root(mem)); + get_online_cpus(); - rcu_read_lock(); - if (!mem) - mem = mem_cgroup_from_task(current); - if (__mem_cgroup_has_dirty_limit(mem)) { - /* - * If we're looking for dirtyable pages we need to evaluate - * free pages depending on the limit and usage of the parents - * first of all. - */ - if (item == MEMCG_NR_DIRTYABLE_PAGES) - value = memcg_hierarchical_free_pages(mem); - else - value = 0; - /* - * Recursively evaluate page statistics against all cgroup - * under hierarchy tree - */ - for_each_mem_cgroup_tree(iter, mem) - value += mem_cgroup_local_page_stat(iter, item); - } else - value = -EINVAL; - rcu_read_unlock(); + + /* + * If we're looking for dirtyable pages we need to evaluate + * free pages depending on the limit and usage of the parents + * first of all. + */ + if (item == MEMCG_NR_DIRTYABLE_PAGES) + value = memcg_hierarchical_free_pages(mem); + else + value = 0; + /* + * Recursively evaluate page statistics against all cgroup + * under hierarchy tree + */ + for_each_mem_cgroup_tree(iter, mem) + value += mem_cgroup_local_page_stat(iter, item); + put_online_cpus(); return value; -- 1.7.3.1 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom policy in Canada: sign http://dissolvethecrtc.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>