mm: fix false-positive OVERCOMMIT_GUESS failures
[sfrench/cifs-2.6.git] / mm / util.c
index 05a464929b3eb4b02380770376d66b58338a2672..e2e4f8c3fa12ab96778f9308b7e2571f991f33af 100644 (file)
--- a/mm/util.c
+++ b/mm/util.c
@@ -652,7 +652,7 @@ EXPORT_SYMBOL_GPL(vm_memory_committed);
  */
 int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin)
 {
-       long free, allowed, reserve;
+       long allowed;
 
        VM_WARN_ONCE(percpu_counter_read(&vm_committed_as) <
                        -(s64)vm_committed_as_batch * num_online_cpus(),
@@ -667,51 +667,9 @@ int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin)
                return 0;
 
        if (sysctl_overcommit_memory == OVERCOMMIT_GUESS) {
-               free = global_zone_page_state(NR_FREE_PAGES);
-               free += global_node_page_state(NR_FILE_PAGES);
-
-               /*
-                * shmem pages shouldn't be counted as free in this
-                * case, they can't be purged, only swapped out, and
-                * that won't affect the overall amount of available
-                * memory in the system.
-                */
-               free -= global_node_page_state(NR_SHMEM);
-
-               free += get_nr_swap_pages();
-
-               /*
-                * Any slabs which are created with the
-                * SLAB_RECLAIM_ACCOUNT flag claim to have contents
-                * which are reclaimable, under pressure.  The dentry
-                * cache and most inode caches should fall into this
-                */
-               free += global_node_page_state(NR_SLAB_RECLAIMABLE);
-
-               /*
-                * Part of the kernel memory, which can be released
-                * under memory pressure.
-                */
-               free += global_node_page_state(NR_KERNEL_MISC_RECLAIMABLE);
-
-               /*
-                * Leave reserved pages. The pages are not for anonymous pages.
-                */
-               if (free <= totalreserve_pages)
+               if (pages > totalram_pages() + total_swap_pages)
                        goto error;
-               else
-                       free -= totalreserve_pages;
-
-               /*
-                * Reserve some for root
-                */
-               if (!cap_sys_admin)
-                       free -= sysctl_admin_reserve_kbytes >> (PAGE_SHIFT - 10);
-
-               if (free > pages)
-                       return 0;
-
-               goto error;
+               return 0;
        }
 
        allowed = vm_commit_limit();
@@ -725,7 +683,8 @@ int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin)
         * Don't let a single process grow so big a user can't recover
         */
        if (mm) {
-               reserve = sysctl_user_reserve_kbytes >> (PAGE_SHIFT - 10);
+               long reserve = sysctl_user_reserve_kbytes >> (PAGE_SHIFT - 10);
+
                allowed -= min_t(long, mm->total_vm / 32, reserve);
        }