--- include/linux/reserve.h | 9 +++------ mm/reserve.c | 46 ++++++++++++++++++++-------------------------- 2 files changed, 23 insertions(+), 32 deletions(-) Index: linux-2.6/include/linux/reserve.h =================================================================== --- linux-2.6.orig/include/linux/reserve.h +++ linux-2.6/include/linux/reserve.h @@ -39,12 +39,10 @@ void mem_reserve_disconnect(struct mem_r int mem_reserve_pages_set(struct mem_reserve *res, long pages); int mem_reserve_pages_add(struct mem_reserve *res, long pages); -int mem_reserve_pages_charge(struct mem_reserve *res, long pages, - int overcommit); +int mem_reserve_pages_charge(struct mem_reserve *res, long pages); int mem_reserve_kmalloc_set(struct mem_reserve *res, long bytes); -int mem_reserve_kmalloc_charge(struct mem_reserve *res, long bytes, - int overcommit); +int mem_reserve_kmalloc_charge(struct mem_reserve *res, long bytes); struct kmem_cache; @@ -52,8 +50,7 @@ int mem_reserve_kmem_cache_set(struct me struct kmem_cache *s, int objects); int mem_reserve_kmem_cache_charge(struct mem_reserve *res, - struct kmem_cache *s, long objs, - int overcommit); + struct kmem_cache *s, long objs); void *___kmalloc_reserve(size_t size, gfp_t flags, int node, void *ip, struct mem_reserve *res, int *emerg); Index: linux-2.6/mm/reserve.c =================================================================== --- linux-2.6.orig/mm/reserve.c +++ linux-2.6/mm/reserve.c @@ -148,18 +148,17 @@ static int __mem_reserve_add(struct mem_ * __mem_reserve_charge() - primitive to charge object usage of a reserve * @res - reserve to charge * @charge - size of the charge - * @overcommit - allow despite of limit (use with caution!) * * Returns non-zero on success, zero on failure. */ static -int __mem_reserve_charge(struct mem_reserve *res, long charge, int overcommit) +int __mem_reserve_charge(struct mem_reserve *res, long charge) { unsigned long flags; int ret = 0; spin_lock_irqsave(&res->lock, flags); - if (charge < 0 || res->usage + charge < res->limit || overcommit) { + if (charge < 0 || res->usage + charge < res->limit) { res->usage += charge; if (unlikely(res->usage < 0)) res->usage = 0; @@ -346,14 +345,12 @@ int mem_reserve_pages_add(struct mem_res * mem_reserve_pages_charge() - charge page usage to a reserve * @res - reserve to charge * @pages - size to charge - * @overcommit - disregard the usage limit (use with caution!) * * Returns non-zero on success. */ -int mem_reserve_pages_charge(struct mem_reserve *res, - long pages, int overcommit) +int mem_reserve_pages_charge(struct mem_reserve *res, long pages) { - return __mem_reserve_charge(res, pages * PAGE_SIZE, overcommit); + return __mem_reserve_charge(res, pages * PAGE_SIZE); } EXPORT_SYMBOL_GPL(mem_reserve_pages_charge); @@ -388,19 +385,17 @@ EXPORT_SYMBOL_GPL(mem_reserve_kmalloc_se * mem_reserve_kmalloc_charge() - charge bytes to a reserve * @res - reserve to charge * @bytes - bytes to charge - * @overcommit - disregard the usage limit (use with caution!) * * Returns non-zero on success. */ -int mem_reserve_kmalloc_charge(struct mem_reserve *res, long bytes, - int overcommit) +int mem_reserve_kmalloc_charge(struct mem_reserve *res, long bytes) { if (bytes < 0) bytes = -roundup_pow_of_two(-bytes); else bytes = roundup_pow_of_two(bytes); - return __mem_reserve_charge(res, bytes, overcommit); + return __mem_reserve_charge(res, bytes); } EXPORT_SYMBOL_GPL(mem_reserve_kmalloc_charge); @@ -437,14 +432,13 @@ EXPORT_SYMBOL_GPL(mem_reserve_kmem_cache * mem_reserve_kmem_cache_charge() - charge (or uncharge) usage of objs * @res - reserve to charge * @objs - objects to charge for - * @overcommit - disregard the usage limit (use with caution!) * * Returns non-zero on success. */ int mem_reserve_kmem_cache_charge(struct mem_reserve *res, struct kmem_cache *s, - long objs, int overcommit) + long objs) { - return __mem_reserve_charge(res, objs * kmem_cache_size(s), overcommit); + return __mem_reserve_charge(res, objs * kmem_cache_size(s)); } EXPORT_SYMBOL_GPL(mem_reserve_kmem_cache_charge); @@ -464,16 +458,16 @@ void *___kmalloc_reserve(size_t size, gf if (obj || !(gfp_to_alloc_flags(flags) & ALLOC_NO_WATERMARKS)) goto out; - if (res && !mem_reserve_kmalloc_charge(res, size, 0)) { + if (res && !mem_reserve_kmalloc_charge(res, size)) { if (!(flags & __GFP_WAIT)) goto out; wait_event(res->waitqueue, - mem_reserve_kmalloc_charge(res, size, 0)); + mem_reserve_kmalloc_charge(res, size)); obj = __kmalloc_node_track_caller(size, gfp, node, ip); if (obj) { - mem_reserve_kmalloc_charge(res, -size, 0); + mem_reserve_kmalloc_charge(res, -size); wake_up_all(&res->waitqueue); goto out; } @@ -498,7 +492,7 @@ void __kfree_reserve(void *obj, struct m * charge; however since we round up to the nearest power of two, this * should all work nicely. */ - mem_reserve_kmalloc_charge(res, -size, 0); + mem_reserve_kmalloc_charge(res, -size); wake_up_all(&res->waitqueue); } @@ -515,16 +509,16 @@ void *__kmem_cache_alloc_reserve(struct if (obj || !(gfp_to_alloc_flags(flags) & ALLOC_NO_WATERMARKS)) goto out; - if (res && !mem_reserve_kmem_cache_charge(res, s, 1, 0)) { + if (res && !mem_reserve_kmem_cache_charge(res, s, 1)) { if (!(flags & __GFP_WAIT)) goto out; wait_event(res->waitqueue, - mem_reserve_kmem_cache_charge(res, s, 1, 0)); + mem_reserve_kmem_cache_charge(res, s, 1)); obj = kmem_cache_alloc_node(s, gfp, node); if (obj) { - mem_reserve_kmem_cache_charge(res, s, -1, 0); + mem_reserve_kmem_cache_charge(res, s, -1); wake_up_all(&res->waitqueue); goto out; } @@ -543,7 +537,7 @@ void __kmem_cache_free_reserve(struct km struct mem_reserve *res, int emerg) { kmem_cache_free(s, obj); - mem_reserve_kmem_cache_charge(res, s, -1, 0); + mem_reserve_kmem_cache_charge(res, s, -1); wake_up_all(&res->waitqueue); } @@ -560,16 +554,16 @@ struct page *__alloc_pages_reserve(int n if (page || !(gfp_to_alloc_flags(flags) & ALLOC_NO_WATERMARKS)) goto out; - if (res && !mem_reserve_pages_charge(res, 1 << order, 0)) { + if (res && !mem_reserve_pages_charge(res, 1 << order)) { if (!(flags & __GFP_WAIT)) goto out; wait_event(res->waitqueue, - mem_reserve_pages_charge(res, 1 << order, 0)); + mem_reserve_pages_charge(res, 1 << order)); page = alloc_pages_node(node, gfp, order); if (page) { - mem_reserve_pages_charge(res, -(1 << order), 0); + mem_reserve_pages_charge(res, -(1 << order)); wake_up_all(&res->waitqueue); goto out; } @@ -588,6 +582,6 @@ void __free_pages_reserve(struct page *p struct mem_reserve *res, int emerg) { __free_pages(page, order); - mem_reserve_pages_charge(res, -(1 << order), 0); + mem_reserve_pages_charge(res, -(1 << order)); wake_up_all(&res->waitqueue); }