From: "Aneesh Kumar K.V" <aneesh.kumar@xxxxxxxxxxxxxxxxxx> Expose the failcnt details to userspace similar to memory and memsw. Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx> --- include/linux/hugetlb.h | 2 +- mm/memcontrol.c | 40 ++++++++++++++++++++++++++-------------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index ee80bc8..cfe3cf5c 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h @@ -219,7 +219,7 @@ struct hstate { unsigned int surplus_huge_pages_node[MAX_NUMNODES]; #ifdef CONFIG_MEM_RES_CTLR_HUGETLB /* mem cgroup control files */ - struct cftype mem_cgroup_files[4]; + struct cftype mem_cgroup_files[5]; #endif char name[HSTATE_NAME_LEN]; }; diff --git a/mm/memcontrol.c b/mm/memcontrol.c index f142ea9..bacb0df 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -4189,7 +4189,7 @@ out: static int mem_cgroup_reset(struct cgroup *cont, unsigned int event) { struct mem_cgroup *memcg = mem_cgroup_from_cont(cont); - int type, name; + int type, name, idx; type = MEMFILE_TYPE(event); name = MEMFILE_ATTR(event); @@ -4197,24 +4197,29 @@ static int mem_cgroup_reset(struct cgroup *cont, unsigned int event) if (!do_swap_account && type == _MEMSWAP) return -EOPNOTSUPP; - switch (name) { - case RES_MAX_USAGE: - if (type == _MEM) + switch (type) { + case _MEM: + if (name == RES_MAX_USAGE) res_counter_reset_max(&memcg->res); - else if (type == _MEMHUGETLB) { - int idx = MEMFILE_IDX(event); - res_counter_reset_max(&memcg->hugepage[idx]); - } else - res_counter_reset_max(&memcg->memsw); - break; - case RES_FAILCNT: - if (type == _MEM) + else res_counter_reset_failcnt(&memcg->res); + break; + case _MEMSWAP: + if (name == RES_MAX_USAGE) + res_counter_reset_max(&memcg->memsw); else res_counter_reset_failcnt(&memcg->memsw); break; + case _MEMHUGETLB: + idx = MEMFILE_IDX(event); + if (name == RES_MAX_USAGE) + res_counter_reset_max(&memcg->hugepage[idx]); + else + res_counter_reset_failcnt(&memcg->hugepage[idx]); + break; + default: + BUG(); } - return 0; } @@ -5299,8 +5304,15 @@ int __init mem_cgroup_hugetlb_file_init(int idx) cft->trigger = mem_cgroup_reset; cft->read = mem_cgroup_read; - /* NULL terminate the last cft */ + /* Add the failcntfile */ cft = &h->mem_cgroup_files[3]; + snprintf(cft->name, MAX_CFTYPE_NAME, "hugetlb.%s.failcnt", buf); + cft->private = __MEMFILE_PRIVATE(idx, _MEMHUGETLB, RES_FAILCNT); + cft->trigger = mem_cgroup_reset; + cft->read = mem_cgroup_read; + + /* NULL terminate the last cft */ + cft = &h->mem_cgroup_files[4]; memset(cft, 0, sizeof(*cft)); WARN_ON(cgroup_add_cftypes(&mem_cgroup_subsys, h->mem_cgroup_files)); -- 1.7.10 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>