return -ENOMEM;
 
        /* mlock limit tests */
-       if (vma->vm_flags & VM_LOCKED) {
-               unsigned long locked;
-               unsigned long limit;
-               locked = mm->locked_vm + grow;
-               limit = rlimit(RLIMIT_MEMLOCK);
-               limit >>= PAGE_SHIFT;
-               if (locked > limit && !capable(CAP_IPC_LOCK))
-                       return -ENOMEM;
-       }
+       if (mlock_future_check(mm, vma->vm_flags, grow << PAGE_SHIFT))
+               return -ENOMEM;
 
        /* Check to ensure the stack will not grow into a hugetlb-only region */
        new_start = (vma->vm_flags & VM_GROWSUP) ? vma->vm_start :