smalloc: Remove read/write lock race condition which will result in segmentation fault

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
diff --git a/smalloc.c b/smalloc.c
index 1c975df..7f3c10b 100644
--- a/smalloc.c
+++ b/smalloc.c
@@ -226,9 +226,7 @@
 
 	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 @@
 {
 	unsigned int i;
 
-	global_read_lock();
+	global_write_lock();
 	i = last_pool;
 
 	do {
@@ -451,7 +449,7 @@
 
 			if (ptr) {
 				last_pool = i;
-				global_read_unlock();
+				global_write_unlock();
 				return ptr;
 			}
 		}
@@ -464,15 +462,13 @@
 			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;
 }