Subject: patch try for ram on 4.1.27
From: Ghislain <gadnet@aqueos.com>
Date: Wed, 29 Jun 2016 10:19:28 +0200
Wed, 29 Jun 2016 10:19:28 +0200
hi,

  here is my apptempt to change the memory report on 4.1.27. Could you 
have a look ?

regards,
Ghislain.




--- /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;



--- /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;