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 /xlators/features/quota | |
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 'xlators/features/quota')
-rw-r--r-- | xlators/features/quota/src/quota-mem-types.h | 3 | ||||
-rw-r--r-- | xlators/features/quota/src/quota.c | 19 | ||||
-rw-r--r-- | xlators/features/quota/src/quota.h | 8 |
3 files changed, 15 insertions, 15 deletions
diff --git a/xlators/features/quota/src/quota-mem-types.h b/xlators/features/quota/src/quota-mem-types.h index da28be5b380..ed70c29285e 100644 --- a/xlators/features/quota/src/quota-mem-types.h +++ b/xlators/features/quota/src/quota-mem-types.h @@ -23,8 +23,7 @@ #include "mem-types.h" enum gf_quota_mem_types_ { - gf_quota_mt_quota_local_t = gf_common_mt_end + 1, - gf_quota_mt_quota_priv_t, + gf_quota_mt_quota_priv_t = gf_common_mt_end + 1, gf_quota_mt_quota_inode_ctx_t, gf_quota_mt_loc_t, gf_quota_mt_char, diff --git a/xlators/features/quota/src/quota.c b/xlators/features/quota/src/quota.c index 3710e8f90cf..6b7db70cfa4 100644 --- a/xlators/features/quota/src/quota.c +++ b/xlators/features/quota/src/quota.c @@ -141,14 +141,13 @@ out: } -quota_local_t * +static inline quota_local_t * quota_local_new () { - quota_local_t *local = NULL; - GF_UNUSED int32_t ret = 0; - - QUOTA_LOCAL_ALLOC_OR_GOTO (local, quota_local_t, err); -err: + quota_local_t *local = NULL; + local = mem_get0 (THIS->local_pool); + if (local) + LOCK_INIT (&local->lock); return local; } @@ -3001,6 +3000,14 @@ init (xlator_t *this) GF_OPTION_INIT ("timeout", priv->timeout, int64, err); + this->local_pool = mem_pool_new (quota_local_t, 1024); + if (!this->local_pool) { + ret = -1; + gf_log (this->name, GF_LOG_ERROR, + "failed to create local_t's memory pool"); + goto err; + } + ret = 0; err: return ret; diff --git a/xlators/features/quota/src/quota.h b/xlators/features/quota/src/quota.h index 9b94d592077..79b4d07e351 100644 --- a/xlators/features/quota/src/quota.h +++ b/xlators/features/quota/src/quota.h @@ -60,12 +60,6 @@ UNLOCK (lock); \ } while (0) -#define QUOTA_LOCAL_ALLOC_OR_GOTO(local, type, label) \ - do { \ - QUOTA_ALLOC_OR_GOTO (local, type, label); \ - LOCK_INIT (&local->lock); \ - } while (0) - #define QUOTA_ALLOC_OR_GOTO(var, type, label) \ do { \ var = GF_CALLOC (sizeof (type), 1, \ @@ -89,7 +83,7 @@ } \ STACK_UNWIND_STRICT (fop, frame, params); \ quota_local_cleanup (_this, _local); \ - GF_FREE (_local); \ + mem_put (_local); \ } while (0) #define QUOTA_FREE_CONTRIBUTION_NODE(_contribution) \ |