mm: An enhancement of OVERCOMMIT_GUESS
Subsystems (2)
PATCH 2/3 mm: An enhancement of OVERCOMMIT_GUESS
This patch is the main part of this enhancement.
Additionally, the patch includes better error handling in __vm_enough_memory().
---
Hideo Aoki, Hitachi Computer Products (America) Inc.
This patch is an enhancement of OVERCOMMIT_GUESS algorithm in __vm_enough_memory() in mm/mmap.c.
When the OVERCOMMIT_GUESS algorithm calculates the number of free pages, the algorithm subtracts the number of reserved pages from the result nr_free_pages().
Signed-off-by Hideo Aoki <[email protected]>
---
mmap.c | 18 +++++++++++++++--- 1 files changed, 15 insertions(+), 3 deletions(-)
mm/mmap.c +15 -3
@@ -121,14 +121,26 @@ int __vm_enough_memory(long pages, int c* only call if we're about to fail. */ n =nr_free_pages (); + +/* +* Leave reserved pages. The pages are not for anonymous pages. +*/ +if (n <= totalreserve_pages) + goto error; +else + n -= totalreserve_pages; + +/* +* Leave the last 3% for root +*/ if (!cap_sys_admin) n -= n /32 ; free += n;if (free > pages)return 0 ; -vm_unacct_memory (pages); -return -ENOMEM ; + + goto error; } allowed = (totalram_pages -hugetlb_total_pages ())
@@ -150,7 +162,7 @@ int __vm_enough_memory(long pages, int c*/ if (atomic_read (&vm_committed_space) < (long )allowed)return 0 ; - +error:vm_unacct_memory (pages);return -ENOMEM ;