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/src | |
| 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/src')
| -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)  | 
