--- /vservers/kernel/linux-4.1.27/mm/memcontrol.c 2016-06-29 10:08:02.981246645 +0200 +++ /root/memcontrol.c 2016-06-29 10:04:47.830990008 +0200 @@ -3194,22 +3194,26 @@ static u64 mem_cgroup_read_u64(struct cg u64 mem_cgroup_mem_usage(struct mem_cgroup *memcg) { - return mem_cgroup_usage(memcg, false); + // retour en ram + return (mem_cgroup_usage(memcg, false) >> PAGE_SHIFT ); } u64 mem_cgroup_mem_limit(struct mem_cgroup *memcg) { - return (u64)memcg->memory.limit * PAGE_SIZE; + // retour en page + return (u64)memcg->memory.limit; } u64 mem_cgroup_memsw_usage(struct mem_cgroup *memcg) { - return mem_cgroup_usage(memcg, true); + // retour en ram + return (mem_cgroup_usage(memcg, true) >> PAGE_SHIFT ); } u64 mem_cgroup_memsw_limit(struct mem_cgroup *memcg) { - return (u64)memcg->memsw.limit * PAGE_SIZE; + // retour en page + return (u64)memcg->memsw.limit; } --- /vservers/kernel/linux-4.1.27/kernel/vserver/limit.c 2016-06-29 10:08:05.909340521 +0200 +++ /root/limit.c 2016-06-29 10:04:16.773994303 +0200 @@ -270,8 +270,9 @@ void vx_vsi_meminfo(struct sysinfo *val) res_usage = mem_cgroup_mem_usage(mcg); if (res_limit != PAGE_COUNTER_MAX) - val->totalram = (res_limit >> PAGE_SHIFT); - val->freeram = val->totalram - (res_usage >> PAGE_SHIFT); + val->totalram = ( val->totalram > res_limit ) ? + res_limit : val->totalram; + val->freeram = val->totalram - res_usage ; val->bufferram = 0; val->totalhigh = 0; val->freehigh = 0; @@ -304,7 +305,7 @@ void vx_vsi_swapinfo(struct sysinfo *val swap_limit = memsw_limit - res_limit; /* we have a swap limit? */ if (memsw_limit != PAGE_COUNTER_MAX) - val->totalswap = swap_limit >> PAGE_SHIFT; + val->totalswap = swap_limit ; /* calculate swap part */ swap_usage = (memsw_usage > res_usage) ? @@ -312,7 +313,7 @@ void vx_vsi_swapinfo(struct sysinfo *val /* total shown minus usage gives free swap */ val->freeswap = (swap_usage < swap_limit) ? - val->totalswap - (swap_usage >> PAGE_SHIFT) : 0; + val->totalswap - swap_usage : 0; out: #else /* !CONFIG_MEMCG_SWAP */ val->totalswap = 0;