diff options
author | Amar Tumballi <amarts@redhat.com> | 2012-02-21 14:47:48 +0530 |
---|---|---|
committer | Anand Avati <avati@redhat.com> | 2012-02-21 02:42:09 -0800 |
commit | 0ef7e763c85c045ef7937d0ca02d8c5f0333e6e8 (patch) | |
tree | e41180dde3fd17b008d8da13357c779b98e351c3 /libglusterfs | |
parent | 1f296b84e6c7bf55fc81d0c1dade7ccda75229a6 (diff) |
core: utilize mempool for frame->local allocations
in each translator, which uses 'frame->local', we are using
GF_CALLOC/GF_FREE, which would be costly considering the
number of allocation happening in a lifetime of 'fop'. It
would be good to utilize the mem pool framework for xlator's
local structures, so there is no allocation overhead.
Change-Id: Ida6e65039a24d9c219b380aa1c3559f36046dc94
Signed-off-by: Amar Tumballi <amar@gluster.com>
BUG: 765336
Reviewed-on: http://review.gluster.com/2772
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'libglusterfs')
-rw-r--r-- | libglusterfs/src/mem-pool.c | 6 | ||||
-rw-r--r-- | libglusterfs/src/stack.h | 4 | ||||
-rw-r--r-- | libglusterfs/src/xlator.c | 3 | ||||
-rw-r--r-- | libglusterfs/src/xlator.h | 3 |
4 files changed, 11 insertions, 5 deletions
diff --git a/libglusterfs/src/mem-pool.c b/libglusterfs/src/mem-pool.c index f94723ba352..2662dc70ab5 100644 --- a/libglusterfs/src/mem-pool.c +++ b/libglusterfs/src/mem-pool.c @@ -385,7 +385,7 @@ mem_get0 (struct mem_pool *mem_pool) void *ptr = NULL; if (!mem_pool) { - gf_log ("mem-pool", GF_LOG_ERROR, "invalid argument"); + gf_log_callingfn ("mem-pool", GF_LOG_ERROR, "invalid argument"); return NULL; } @@ -406,7 +406,7 @@ mem_get (struct mem_pool *mem_pool) struct mem_pool **pool_ptr = NULL; if (!mem_pool) { - gf_log ("mem-pool", GF_LOG_ERROR, "invalid argument"); + gf_log_callingfn ("mem-pool", GF_LOG_ERROR, "invalid argument"); return NULL; } @@ -500,7 +500,7 @@ mem_put (void *ptr) struct mem_pool *pool = NULL; if (!ptr) { - gf_log ("mem-pool", GF_LOG_ERROR, "invalid argument"); + gf_log_callingfn ("mem-pool", GF_LOG_ERROR, "invalid argument"); return; } diff --git a/libglusterfs/src/stack.h b/libglusterfs/src/stack.h index c8404057610..220eab49d0e 100644 --- a/libglusterfs/src/stack.h +++ b/libglusterfs/src/stack.h @@ -155,7 +155,7 @@ FRAME_DESTROY (call_frame_t *frame) mem_put (frame); if (local) - GF_FREE (local); + mem_put (local); } @@ -184,7 +184,7 @@ STACK_DESTROY (call_stack_t *stack) mem_put (stack); if (local) - GF_FREE (local); + mem_put (local); } diff --git a/libglusterfs/src/xlator.c b/libglusterfs/src/xlator.c index 01475f5a1c3..ec20029591e 100644 --- a/libglusterfs/src/xlator.c +++ b/libglusterfs/src/xlator.c @@ -430,6 +430,9 @@ xlator_fini_rec (xlator_t *xl) xl->fini (xl); + if (xl->local_pool) + mem_pool_destroy (xl->local_pool); + THIS = old_THIS; } else { gf_log (xl->name, GF_LOG_DEBUG, "No fini() found"); diff --git a/libglusterfs/src/xlator.h b/libglusterfs/src/xlator.h index 9767ad04391..c0b56a7b0c2 100644 --- a/libglusterfs/src/xlator.h +++ b/libglusterfs/src/xlator.h @@ -830,6 +830,9 @@ struct _xlator { struct mem_acct mem_acct; uint64_t winds; char switched; + + /* for the memory pool of 'frame->local' */ + struct mem_pool *local_pool; }; #define xlator_has_parent(xl) (xl->parents != NULL) |