smalloc: when adding a new pool, make it big enough to hold the failing alloc

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
diff --git a/smalloc.c b/smalloc.c
index 5baf5a4..28f8263 100644
--- a/smalloc.c
+++ b/smalloc.c
@@ -220,7 +220,7 @@
 #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 @@
 	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 @@
 #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 @@
 		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();
 		}