From 0127c57b82cfef26149c04b1d785897a68a6dffa Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Mon, 9 Nov 2015 19:38:15 -0700 Subject: [PATCH] smalloc: get rid of global lock We don't dynamically add pools anymore, so we don't need global read/write locks. Also drop the needless wrappers around pool locking. Signed-off-by: Jens Axboe --- smalloc.c | 51 ++++----------------------------------------------- 1 file changed, 4 insertions(+), 47 deletions(-) diff --git a/smalloc.c b/smalloc.c index 5047cda5..b6b367ae 100644 --- a/smalloc.c +++ b/smalloc.c @@ -56,37 +56,6 @@ struct block_hdr { static struct pool mp[MAX_POOLS]; static unsigned int nr_pools; static unsigned int last_pool; -static struct fio_rwlock *lock; - -static inline void pool_lock(struct pool *pool) -{ - fio_mutex_down(pool->lock); -} - -static inline void pool_unlock(struct pool *pool) -{ - fio_mutex_up(pool->lock); -} - -static inline void global_read_lock(void) -{ - fio_rwlock_read(lock); -} - -static inline void global_read_unlock(void) -{ - fio_rwlock_unlock(lock); -} - -static inline void global_write_lock(void) -{ - fio_rwlock_write(lock); -} - -static inline void global_write_unlock(void) -{ - fio_rwlock_unlock(lock); -} static inline int ptr_valid(struct pool *pool, void *ptr) { @@ -234,8 +203,6 @@ void sinit(void) { int i, ret; - lock = fio_rwlock_init(); - for (i = 0; i < MAX_POOLS; i++) { ret = add_pool(&mp[i], INITIAL_SIZE); if (ret) @@ -267,9 +234,6 @@ void scleanup(void) for (i = 0; i < nr_pools; i++) cleanup_pool(&mp[i]); - - if (lock) - fio_rwlock_remove(lock); } #ifdef SMALLOC_REDZONE @@ -338,12 +302,12 @@ static void sfree_pool(struct pool *pool, void *ptr) i = offset / SMALLOC_BPL; idx = (offset % SMALLOC_BPL) / SMALLOC_BPB; - pool_lock(pool); + fio_mutex_down(pool->lock); clear_blocks(pool, i, idx, size_to_blocks(hdr->size)); if (i < pool->next_non_full) pool->next_non_full = i; pool->free_blocks += size_to_blocks(hdr->size); - pool_unlock(pool); + fio_mutex_up(pool->lock); } void sfree(void *ptr) @@ -354,8 +318,6 @@ void sfree(void *ptr) if (!ptr) return; - global_read_lock(); - for (i = 0; i < nr_pools; i++) { if (ptr_valid(&mp[i], ptr)) { pool = &mp[i]; @@ -363,8 +325,6 @@ void sfree(void *ptr) } } - global_read_unlock(); - if (pool) { sfree_pool(pool, ptr); return; @@ -381,7 +341,7 @@ static void *__smalloc_pool(struct pool *pool, size_t size) unsigned int last_idx; void *ret = NULL; - pool_lock(pool); + fio_mutex_down(pool->lock); nr_blocks = size_to_blocks(size); if (nr_blocks > pool->free_blocks) @@ -424,7 +384,7 @@ static void *__smalloc_pool(struct pool *pool, size_t size) ret = pool->map + offset; } fail: - pool_unlock(pool); + fio_mutex_up(pool->lock); return ret; } @@ -463,7 +423,6 @@ void *smalloc(size_t size) if (size != (unsigned int) size) return NULL; - global_write_lock(); i = last_pool; end_pool = nr_pools; @@ -473,7 +432,6 @@ void *smalloc(size_t size) if (ptr) { last_pool = i; - global_write_unlock(); return ptr; } } @@ -486,7 +444,6 @@ void *smalloc(size_t size) break; } while (1); - global_write_unlock(); return NULL; } -- 2.25.1