From adf57099338307b3a4a129475a12aad31e35ade3 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Wed, 16 Apr 2008 19:43:17 +0200 Subject: [PATCH] smalloc: when adding a new pool, make it big enough to hold the failing alloc Signed-off-by: Jens Axboe --- smalloc.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/smalloc.c b/smalloc.c index 5baf5a43..28f82633 100644 --- a/smalloc.c +++ b/smalloc.c @@ -220,7 +220,7 @@ fail: #endif } -static int add_pool(struct pool *pool) +static int add_pool(struct pool *pool, unsigned int alloc_size) { struct mem_hdr *hdr; void *ptr; @@ -231,7 +231,11 @@ static int add_pool(struct pool *pool) if (fd < 0) goto out_close; - pool->size = smalloc_pool_size; + if (alloc_size > smalloc_pool_size) + pool->size = alloc_size; + else + pool->size = smalloc_pool_size; + if (ftruncate(fd, pool->size) < 0) goto out_unlink; @@ -275,7 +279,7 @@ void sinit(void) #ifdef MP_SAFE lock = fio_mutex_rw_init(); #endif - ret = add_pool(&mp[0]); + ret = add_pool(&mp[0], INITIAL_SIZE); assert(!ret); } @@ -458,7 +462,7 @@ void *smalloc(unsigned int size) else { i = nr_pools; global_read_unlock(); - if (add_pool(&mp[nr_pools])) + if (add_pool(&mp[nr_pools], size)) goto out; global_read_lock(); } -- 2.25.1