--- include/linux/reserve.h | 2 +- mm/reserve.c | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) Index: linux-2.6/include/linux/reserve.h =================================================================== --- linux-2.6.orig/include/linux/reserve.h +++ linux-2.6/include/linux/reserve.h @@ -48,7 +48,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, - long objs, + struct kmem_cache *s, long objs, int overcommit); #endif /* _LINUX_RESERVE_H */ Index: linux-2.6/mm/reserve.c =================================================================== --- linux-2.6.orig/mm/reserve.c +++ linux-2.6/mm/reserve.c @@ -310,7 +310,7 @@ int mem_reserve_pages_set(struct mem_res mutex_lock(&mem_reserve_mutex); pages -= res->pages; - ret = __mem_reserve_add(res, pages, pages); + ret = __mem_reserve_add(res, pages, pages * PAGE_SIZE); mutex_unlock(&mem_reserve_mutex); return ret; @@ -332,7 +332,7 @@ int mem_reserve_pages_add(struct mem_res int ret; mutex_lock(&mem_reserve_mutex); - ret = __mem_reserve_add(res, pages, pages); + ret = __mem_reserve_add(res, pages, pages * PAGE_SIZE); mutex_unlock(&mem_reserve_mutex); return ret; @@ -349,7 +349,7 @@ int mem_reserve_pages_add(struct mem_res int mem_reserve_pages_charge(struct mem_reserve *res, long pages, int overcommit) { - return __mem_reserve_charge(res, pages, overcommit); + return __mem_reserve_charge(res, pages * PAGE_SIZE, overcommit); } EXPORT_SYMBOL_GPL(mem_reserve_pages_charge); @@ -416,13 +416,13 @@ int mem_reserve_kmem_cache_set(struct me int objects) { int ret; - long pages; + long pages, bytes; mutex_lock(&mem_reserve_mutex); pages = kmem_alloc_estimate(s, GFP_ATOMIC, objects); pages -= res->pages; - objects -= res->limit; - ret = __mem_reserve_add(res, pages, objects); + bytes = objects * kmem_cache_size(s) - res->limit; + ret = __mem_reserve_add(res, pages, bytes); mutex_unlock(&mem_reserve_mutex); return ret; @@ -437,9 +437,9 @@ EXPORT_SYMBOL_GPL(mem_reserve_kmem_cache * * Returns non-zero on success. */ -int mem_reserve_kmem_cache_charge(struct mem_reserve *res, long objs, - int overcommit) +int mem_reserve_kmem_cache_charge(struct mem_reserve *res, struct kmem_cache *s, + long objs, int overcommit) { - return __mem_reserve_charge(res, objs, overcommit); + return __mem_reserve_charge(res, objs * kmem_cache_size(s), overcommit); } EXPORT_SYMBOL_GPL(mem_reserve_kmem_cache_charge);