summaryrefslogtreecommitdiff
path: root/smalloc.c
diff options
context:
space:
mode:
authorJens Axboe <jens.axboe@oracle.com>2009-07-07 23:03:06 +0200
committerJens Axboe <jens.axboe@oracle.com>2009-07-07 23:03:06 +0200
commit122426daab0fbd2fce244ac018d737a8f302f974 (patch)
treefd60e9d11e161f8cd19d1f4d93d6de1ad7c261b2 /smalloc.c
parentcf98708da292cb9e77bb6aff4eda7652103f4f77 (diff)
downloadfio-122426daab0fbd2fce244ac018d737a8f302f974.tar.gz
smalloc: just round alloc_size to int aligned for post redzone pointer
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'smalloc.c')
-rw-r--r--smalloc.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/smalloc.c b/smalloc.c
index e0bc4981..ac5754d5 100644
--- a/smalloc.c
+++ b/smalloc.c
@@ -27,6 +27,7 @@
#define SMALLOC_POST_RED 0x5aa55aa5U
unsigned int smalloc_pool_size = INITIAL_SIZE;
+const int int_mask = sizeof(int) - 1;
struct pool {
struct fio_mutex *lock; /* protects this pool */
@@ -270,7 +271,6 @@ void scleanup(void)
#ifdef SMALLOC_REDZONE
static void *postred_ptr(struct block_hdr *hdr)
{
- const int int_mask = sizeof(unsigned int) - 1;
unsigned long ptr;
ptr = (unsigned long) hdr + hdr->size - sizeof(unsigned int);
@@ -426,11 +426,12 @@ static void *smalloc_pool(struct pool *pool, unsigned int size)
void *ptr;
/*
- * Use twice the size for good luck, we may need to adjust
- * alignment.
+ * Round to int alignment, so that the postred pointer will
+ * be naturally aligned as well.
*/
#ifdef SMALLOC_REDZONE
- alloc_size += 2 * sizeof(unsigned int);
+ alloc_size += sizeof(unsigned int);
+ alloc_size = (alloc_size + int_mask) & ~int_mask;
#endif
ptr = __smalloc_pool(pool, alloc_size);