projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
smalloc: when adding a new pool, make it big enough to hold the failing alloc
[fio.git]
/
smalloc.c
diff --git
a/smalloc.c
b/smalloc.c
index 5baf5a43b711d1a8850a67dd0a39f69e0ee333be..28f82633b23661c9e49f80612ac2c6d550c4fa8e 100644
(file)
--- a/
smalloc.c
+++ b/
smalloc.c
@@
-220,7
+220,7
@@
fail:
#endif
}
#endif
}
-static int add_pool(struct pool *pool)
+static int add_pool(struct pool *pool
, unsigned int alloc_size
)
{
struct mem_hdr *hdr;
void *ptr;
{
struct mem_hdr *hdr;
void *ptr;
@@
-231,7
+231,11
@@
static int add_pool(struct pool *pool)
if (fd < 0)
goto out_close;
if (fd < 0)
goto out_close;
- pool->size = smalloc_pool_size;
+ if (alloc_size > smalloc_pool_size)
+ pool->size = alloc_size;
+ else
+ pool->size = smalloc_pool_size;
+
if (ftruncate(fd, pool->size) < 0)
goto out_unlink;
if (ftruncate(fd, pool->size) < 0)
goto out_unlink;
@@
-275,7
+279,7
@@
void sinit(void)
#ifdef MP_SAFE
lock = fio_mutex_rw_init();
#endif
#ifdef MP_SAFE
lock = fio_mutex_rw_init();
#endif
- ret = add_pool(&mp[0]);
+ ret = add_pool(&mp[0]
, INITIAL_SIZE
);
assert(!ret);
}
assert(!ret);
}
@@
-458,7
+462,7
@@
void *smalloc(unsigned int size)
else {
i = nr_pools;
global_read_unlock();
else {
i = nr_pools;
global_read_unlock();
- if (add_pool(&mp[nr_pools]))
+ if (add_pool(&mp[nr_pools]
, size
))
goto out;
global_read_lock();
}
goto out;
global_read_lock();
}