The following changes since commit f52c9691bc8c285f3445235c69acdfd6de7f9b82: Fio 2.2.6 (2015-02-27 08:30:04 -0700) are available in the git repository at: git://git.kernel.dk/fio.git master for you to fetch changes up to 85492cb89e2421ae71d92b1c88e75efda3ee1f1b: smalloc: bump initial size to 8 pools (2015-03-03 15:13:17 -0700) ---------------------------------------------------------------- Christian Ehrhardt (1): fio: fix smalloc strdop allocation failure Jens Axboe (1): smalloc: bump initial size to 8 pools smalloc.c | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) --- Diff of recent changes: diff --git a/smalloc.c b/smalloc.c index 67cb7cc..b460d65 100644 --- a/smalloc.c +++ b/smalloc.c @@ -26,7 +26,7 @@ #define SMALLOC_BPL (SMALLOC_BPB * SMALLOC_BPI) #define INITIAL_SIZE 16*1024*1024 /* new pool size */ -#define MAX_POOLS 1 /* maximum number of pools to setup */ +#define MAX_POOLS 8 /* maximum number of pools to setup */ #define SMALLOC_PRE_RED 0xdeadbeefU #define SMALLOC_POST_RED 0x5aa55aa5U @@ -230,11 +230,21 @@ out_fail: void sinit(void) { - int ret; + int i, ret; lock = fio_rwlock_init(); - ret = add_pool(&mp[0], INITIAL_SIZE); - assert(!ret); + + for (i = 0; i < MAX_POOLS; i++) { + ret = add_pool(&mp[i], INITIAL_SIZE); + if (ret) + break; + } + + /* + * If we added at least one pool, we should be OK for most + * cases. + */ + assert(i); } static void cleanup_pool(struct pool *pool) @@ -442,16 +452,17 @@ static void *smalloc_pool(struct pool *pool, size_t size) void *smalloc(size_t size) { - unsigned int i; + unsigned int i, end_pool; if (size != (unsigned int) size) return NULL; global_write_lock(); i = last_pool; + end_pool = nr_pools; do { - for (; i < nr_pools; i++) { + for (; i < end_pool; i++) { void *ptr = smalloc_pool(&mp[i], size); if (ptr) { @@ -461,20 +472,14 @@ void *smalloc(size_t size) } } if (last_pool) { - last_pool = 0; + end_pool = last_pool; + last_pool = i = 0; continue; } - if (nr_pools + 1 > MAX_POOLS) - break; - else { - i = nr_pools; - if (add_pool(&mp[nr_pools], size)) - goto out; - } + break; } while (1); -out: global_write_unlock(); return NULL; } @@ -492,9 +497,10 @@ void *scalloc(size_t nmemb, size_t size) char *smalloc_strdup(const char *str) { - char *ptr; + char *ptr = NULL; ptr = smalloc(strlen(str) + 1); - strcpy(ptr, str); + if (ptr) + strcpy(ptr, str); return ptr; } -- To unsubscribe from this list: send the line "unsubscribe fio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html