X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;ds=sidebyside;f=smalloc.c;h=7f3c10b137498d01f812e4807298b2f2b06e6870;hb=0d7e3c94c35332535fc2c723d9a0682c3a4aafad;hp=0a86c43b0f17d58a5aa69587f92eff1d4f39c279;hpb=6548f47f241013c7f6e1bb4b8a341f7d7a78764f;p=fio.git diff --git a/smalloc.c b/smalloc.c index 0a86c43b..7f3c10b1 100644 --- a/smalloc.c +++ b/smalloc.c @@ -22,7 +22,7 @@ #define SMALLOC_BPL (SMALLOC_BPB * SMALLOC_BPI) #define INITIAL_SIZE 1024*1024 /* new pool size */ -#define MAX_POOLS 4 /* maximum number of pools to setup */ +#define MAX_POOLS 128 /* maximum number of pools to setup */ #define SMALLOC_PRE_RED 0xdeadbeefU #define SMALLOC_POST_RED 0x5aa55aa5U @@ -226,9 +226,7 @@ static int add_pool(struct pool *pool, unsigned int alloc_size) pool->fd = fd; - global_write_lock(); nr_pools++; - global_write_unlock(); return 0; out_unlink: fprintf(stderr, "smalloc: failed adding pool\n"); @@ -442,7 +440,7 @@ void *smalloc(unsigned int size) { unsigned int i; - global_read_lock(); + global_write_lock(); i = last_pool; do { @@ -451,7 +449,7 @@ void *smalloc(unsigned int size) if (ptr) { last_pool = i; - global_read_unlock(); + global_write_unlock(); return ptr; } } @@ -464,15 +462,13 @@ void *smalloc(unsigned int size) break; else { i = nr_pools; - global_read_unlock(); if (add_pool(&mp[nr_pools], size)) goto out; - global_read_lock(); } } while (1); - global_read_unlock(); out: + global_write_unlock(); return NULL; }