diff -NurpP --minimal linux-4.1.18-vs2.3.8.4/include/linux/memcontrol.h linux-4.1.18-vs2.3.8.5/include/linux/memcontrol.h --- linux-4.1.18-vs2.3.8.4/include/linux/memcontrol.h 2015-07-06 20:43:43.000000000 +0000 +++ linux-4.1.18-vs2.3.8.5/include/linux/memcontrol.h 2016-02-21 00:03:08.000000000 +0000 @@ -98,6 +98,11 @@ extern struct mem_cgroup *mem_cgroup_fro extern struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg); extern struct mem_cgroup *mem_cgroup_from_css(struct cgroup_subsys_state *css); +extern u64 mem_cgroup_mem_usage(struct mem_cgroup *memcg); +extern u64 mem_cgroup_mem_limit(struct mem_cgroup *memcg); +extern u64 mem_cgroup_memsw_usage(struct mem_cgroup *memcg); +extern u64 mem_cgroup_memsw_limit(struct mem_cgroup *memcg); + static inline bool mm_match_cgroup(struct mm_struct *mm, struct mem_cgroup *memcg) { diff -NurpP --minimal linux-4.1.18-vs2.3.8.4/kernel/vserver/limit.c linux-4.1.18-vs2.3.8.5/kernel/vserver/limit.c --- linux-4.1.18-vs2.3.8.4/kernel/vserver/limit.c 2015-07-06 20:43:44.000000000 +0000 +++ linux-4.1.18-vs2.3.8.5/kernel/vserver/limit.c 2016-02-21 00:00:54.000000000 +0000 @@ -283,7 +283,6 @@ out: void vx_vsi_swapinfo(struct sysinfo *val) { -#ifdef CONFIG_MEMCG_BROKEN #ifdef CONFIG_MEMCG_SWAP struct mem_cgroup *mcg; u64 res_limit, res_usage, memsw_limit, memsw_usage; @@ -295,10 +294,10 @@ void vx_vsi_swapinfo(struct sysinfo *val if (!mcg) goto out; - // res_limit = mem_cgroup_res_read_u64(mcg, RES_LIMIT); - // res_usage = mem_cgroup_res_read_u64(mcg, RES_USAGE); - // memsw_limit = mem_cgroup_memsw_read_u64(mcg, RES_LIMIT); - // memsw_usage = mem_cgroup_memsw_read_u64(mcg, RES_USAGE); + res_limit = mem_cgroup_mem_limit(mcg); + res_usage = mem_cgroup_mem_usage(mcg); + memsw_limit = mem_cgroup_memsw_limit(mcg); + memsw_usage = mem_cgroup_memsw_usage(mcg); /* memory unlimited */ if (res_limit == PAGE_COUNTER_MAX) @@ -321,7 +320,6 @@ out: val->totalswap = 0; val->freeswap = 0; #endif /* !CONFIG_MEMCG_SWAP */ -#endif /* CONFIG_MEMCG */ return; } diff -NurpP --minimal linux-4.1.18-vs2.3.8.4/mm/memcontrol.c linux-4.1.18-vs2.3.8.5/mm/memcontrol.c --- linux-4.1.18-vs2.3.8.4/mm/memcontrol.c 2016-02-19 03:14:23.000000000 +0000 +++ linux-4.1.18-vs2.3.8.5/mm/memcontrol.c 2016-02-21 00:02:47.000000000 +0000 @@ -3192,6 +3192,28 @@ static u64 mem_cgroup_read_u64(struct cg } } +u64 mem_cgroup_mem_usage(struct mem_cgroup *memcg) +{ + return mem_cgroup_usage(memcg, false); +} + +u64 mem_cgroup_mem_limit(struct mem_cgroup *memcg) +{ + return (u64)memcg->memory.limit * PAGE_SIZE; +} + +u64 mem_cgroup_memsw_usage(struct mem_cgroup *memcg) +{ + return mem_cgroup_usage(memcg, true); +} + +u64 mem_cgroup_memsw_limit(struct mem_cgroup *memcg) +{ + return (u64)memcg->memsw.limit * PAGE_SIZE; +} + + + #ifdef CONFIG_MEMCG_KMEM static int memcg_activate_kmem(struct mem_cgroup *memcg, unsigned long nr_pages)