Handle end_fsync if a file is closed
[fio.git] / smalloc.c
index 5ba20047b37676ec8659dffc53dd6459061a5e4d..b0173739b49c18254e5a425d58d09e9369a0792e 100644 (file)
--- a/smalloc.c
+++ b/smalloc.c
@@ -36,14 +36,14 @@ struct pool {
        struct fio_mutex *lock;                 /* protects this pool */
        void *map;                              /* map of blocks */
        unsigned int *bitmap;                   /* blocks free/busy map */
-       unsigned int free_blocks;               /* free blocks */
-       unsigned int nr_blocks;                 /* total blocks */
-       unsigned int next_non_full;
-       unsigned int mmap_size;
+       size_t free_blocks;             /* free blocks */
+       size_t nr_blocks;                       /* total blocks */
+       size_t next_non_full;
+       size_t mmap_size;
 };
 
 struct block_hdr {
-       unsigned int size;
+       size_t size;
 #ifdef SMALLOC_REDZONE
        unsigned int prered;
 #endif
@@ -91,13 +91,13 @@ static inline int ptr_valid(struct pool *pool, void *ptr)
        return (ptr >= pool->map) && (ptr < pool->map + pool_size);
 }
 
-static inline unsigned int size_to_blocks(unsigned int size)
+static inline size_t size_to_blocks(size_t size)
 {
        return (size + SMALLOC_BPB - 1) / SMALLOC_BPB;
 }
 
 static int blocks_iter(struct pool *pool, unsigned int pool_idx,
-                      unsigned int idx, unsigned int nr_blocks,
+                      unsigned int idx, size_t nr_blocks,
                       int (*func)(unsigned int *map, unsigned int mask))
 {
 
@@ -152,19 +152,19 @@ static int mask_set(unsigned int *map, unsigned int mask)
 }
 
 static int blocks_free(struct pool *pool, unsigned int pool_idx,
-                      unsigned int idx, unsigned int nr_blocks)
+                      unsigned int idx, size_t nr_blocks)
 {
        return blocks_iter(pool, pool_idx, idx, nr_blocks, mask_cmp);
 }
 
 static void set_blocks(struct pool *pool, unsigned int pool_idx,
-                      unsigned int idx, unsigned int nr_blocks)
+                      unsigned int idx, size_t nr_blocks)
 {
        blocks_iter(pool, pool_idx, idx, nr_blocks, mask_set);
 }
 
 static void clear_blocks(struct pool *pool, unsigned int pool_idx,
-                        unsigned int idx, unsigned int nr_blocks)
+                        unsigned int idx, size_t nr_blocks)
 {
        blocks_iter(pool, pool_idx, idx, nr_blocks, mask_clear);
 }
@@ -206,7 +206,7 @@ static int add_pool(struct pool *pool, unsigned int alloc_size)
        pool->map = ptr;
        pool->bitmap = (void *) ptr + (pool->nr_blocks * SMALLOC_BPL);
 
-       pool->lock = fio_mutex_init(1);
+       pool->lock = fio_mutex_init(FIO_MUTEX_UNLOCKED);
        if (!pool->lock)
                goto out_fail;
 
@@ -348,9 +348,9 @@ void sfree(void *ptr)
        sfree_pool(pool, ptr);
 }
 
-static void *__smalloc_pool(struct pool *pool, unsigned int size)
+static void *__smalloc_pool(struct pool *pool, size_t size)
 {
-       unsigned int nr_blocks;
+       size_t nr_blocks;
        unsigned int i;
        unsigned int offset;
        unsigned int last_idx;
@@ -403,9 +403,9 @@ fail:
        return ret;
 }
 
-static void *smalloc_pool(struct pool *pool, unsigned int size)
+static void *smalloc_pool(struct pool *pool, size_t size)
 {
-       unsigned int alloc_size = size + sizeof(struct block_hdr);
+       size_t alloc_size = size + sizeof(struct block_hdr);
        void *ptr;
 
        /*
@@ -431,10 +431,13 @@ static void *smalloc_pool(struct pool *pool, unsigned int size)
        return ptr;
 }
 
-void *smalloc(unsigned int size)
+void *smalloc(size_t size)
 {
        unsigned int i;
 
+       if (size != (unsigned int) size)
+               return NULL;
+
        global_write_lock();
        i = last_pool;