The commit is pushed to "branch-rh7-3.10.0-327.18.2.vz7.14.x-ovz" and will 
appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-327.18.2.vz7.14.21
------>
commit d72403517f67ba6f790178ce539e36b5bc5eebe8
Author: Andrey Ryabinin <aryabi...@virtuozzo.com>
Date:   Mon Jun 27 15:36:33 2016 +0400

    ub: account memory overcommit failures in UB_PRIVVMPAGES.failcnt
    
    If allocation failed due to memory overcommit failcounters doesn't change.
    This contradicts with userspace expectations.
    With this patch, such failures will be accounted in failconter of
    UB_PRIVVMPAGES.
    
    https://jira.sw.ru/browse/PSBM-48891
    
    Signed-off-by: Andrey Ryabinin <aryabi...@virtuozzo.com>
    Reviewed-by: Vladimir Davydov <vdavy...@virtuozzo.com>
---
 kernel/bc/vm_pages.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/kernel/bc/vm_pages.c b/kernel/bc/vm_pages.c
index 63b335d..0bc5dda 100644
--- a/kernel/bc/vm_pages.c
+++ b/kernel/bc/vm_pages.c
@@ -125,6 +125,7 @@ int ub_enough_memory(struct mm_struct *mm, long pages)
 {
        struct user_beancounter *ub;
        struct cgroup_subsys_state *css;
+       unsigned long flags;
        int ret;
 
        if (!mm)
@@ -133,8 +134,10 @@ int ub_enough_memory(struct mm_struct *mm, long pages)
        ub = mm->mm_ub;
 
        if (ub->ub_parms[UB_PRIVVMPAGES].held >
-           ub->ub_parms[UB_PRIVVMPAGES].barrier)
-               return -ENOMEM;
+           ub->ub_parms[UB_PRIVVMPAGES].barrier) {
+               ret = -ENOMEM;
+               goto out;
+       }
 
        if (ub == get_ub0() || ub_overcommit_memory)
                return 0;
@@ -142,6 +145,12 @@ int ub_enough_memory(struct mm_struct *mm, long pages)
        css = ub_get_mem_css(ub);
        ret = mem_cgroup_enough_memory(mem_cgroup_from_cont(css->cgroup), 
pages);
        css_put(css);
+out:
+       if (unlikely(ret < 0)) {
+               spin_lock_irqsave(&ub->ub_lock, flags);
+               ub->ub_parms[UB_PRIVVMPAGES].failcnt++;
+               spin_unlock_irqrestore(&ub->ub_lock, flags);
+       }
        return ret;
 }
 
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to