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 | |
| 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>
59 files changed, 407 insertions, 375 deletions
diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index 0906f3387ce..6b9c0b03f41 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -104,7 +104,7 @@ out:                  if ((sent == 0) && (parse_error == 0))                          cli_out ("Getting Volume information failed!");          } - +        frame->local = NULL;          if (frame)                  FRAME_DESTROY (frame); 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) diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c index 9a78f6d3d4d..d241825940f 100644 --- a/xlators/cluster/afr/src/afr-common.c +++ b/xlators/cluster/afr/src/afr-common.c @@ -1968,7 +1968,7 @@ afr_lookup (call_frame_t *frame, xlator_t *this,          priv = this->private; -        ALLOC_OR_GOTO (local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (local, out);          local->op_ret = -1; @@ -2306,7 +2306,7 @@ afr_flush (call_frame_t *frame, xlator_t *this, fd_t *fd)                  goto out;          } -        ALLOC_OR_GOTO (transaction_frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (transaction_frame->local, out);          local = transaction_frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -2491,7 +2491,7 @@ afr_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd,          priv = this->private; -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -2570,7 +2570,7 @@ afr_fsyncdir (call_frame_t *frame, xlator_t *this, fd_t *fd,          priv = this->private; -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -2647,7 +2647,7 @@ afr_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc,          priv = this->private; -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -2725,7 +2725,7 @@ afr_fxattrop (call_frame_t *frame, xlator_t *this, fd_t *fd,          priv = this->private; -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -2801,7 +2801,7 @@ afr_inodelk (call_frame_t *frame, xlator_t *this,          priv = this->private; -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -2876,7 +2876,7 @@ afr_finodelk (call_frame_t *frame, xlator_t *this,          priv = this->private; -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -2952,7 +2952,7 @@ afr_entrylk (call_frame_t *frame, xlator_t *this,          priv = this->private; -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -3029,7 +3029,7 @@ afr_fentrylk (call_frame_t *frame, xlator_t *this,          priv = this->private; -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -3116,7 +3116,7 @@ afr_statfs (call_frame_t *frame, xlator_t *this,          priv = this->private;          child_count = priv->child_count; -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -3286,7 +3286,7 @@ afr_lk (call_frame_t *frame, xlator_t *this,          priv = this->private; -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); diff --git a/xlators/cluster/afr/src/afr-dir-read.c b/xlators/cluster/afr/src/afr-dir-read.c index 389515e3c36..ee9c5d8cc7f 100644 --- a/xlators/cluster/afr/src/afr-dir-read.c +++ b/xlators/cluster/afr/src/afr-dir-read.c @@ -317,7 +317,7 @@ afr_opendir (call_frame_t *frame, xlator_t *this,          child_count = priv->child_count; -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -649,7 +649,7 @@ afr_do_readdir (call_frame_t *frame, xlator_t *this,          priv     = this->private;          children = priv->children; -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); diff --git a/xlators/cluster/afr/src/afr-dir-write.c b/xlators/cluster/afr/src/afr-dir-write.c index 91aa2a9e7af..ef0025c8172 100644 --- a/xlators/cluster/afr/src/afr-dir-write.c +++ b/xlators/cluster/afr/src/afr-dir-write.c @@ -286,7 +286,7 @@ afr_create (call_frame_t *frame, xlator_t *this,                  goto out;          } -        ALLOC_OR_GOTO (transaction_frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (transaction_frame->local, out);          local = transaction_frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -508,7 +508,7 @@ afr_mknod (call_frame_t *frame, xlator_t *this,                  goto out;          } -        ALLOC_OR_GOTO (transaction_frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (transaction_frame->local, out);          local = transaction_frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -731,7 +731,7 @@ afr_mkdir (call_frame_t *frame, xlator_t *this,                  goto out;          } -        ALLOC_OR_GOTO (transaction_frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (transaction_frame->local, out);          local = transaction_frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -953,7 +953,7 @@ afr_link (call_frame_t *frame, xlator_t *this,                  goto out;          } -        ALLOC_OR_GOTO (transaction_frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (transaction_frame->local, out);          local = transaction_frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -1173,7 +1173,7 @@ afr_symlink (call_frame_t *frame, xlator_t *this,                  goto out;          } -        ALLOC_OR_GOTO (transaction_frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (transaction_frame->local, out);          local = transaction_frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -1388,7 +1388,7 @@ afr_rename (call_frame_t *frame, xlator_t *this,                  goto out;          } -        ALLOC_OR_GOTO (transaction_frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (transaction_frame->local, out);          local = transaction_frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -1584,7 +1584,7 @@ afr_unlink (call_frame_t *frame, xlator_t *this,                  goto out;          } -        ALLOC_OR_GOTO (transaction_frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (transaction_frame->local, out);          local = transaction_frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -1777,7 +1777,7 @@ afr_rmdir (call_frame_t *frame, xlator_t *this,                  goto out;          } -        ALLOC_OR_GOTO (transaction_frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (transaction_frame->local, out);          local = transaction_frame->local;          ret = afr_local_init (local, priv, &op_errno); diff --git a/xlators/cluster/afr/src/afr-inode-read.c b/xlators/cluster/afr/src/afr-inode-read.c index ec0acbd3b0b..499804e6a36 100644 --- a/xlators/cluster/afr/src/afr-inode-read.c +++ b/xlators/cluster/afr/src/afr-inode-read.c @@ -124,7 +124,7 @@ afr_access (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask)          children = priv->children; -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -239,7 +239,7 @@ afr_stat (call_frame_t *frame, xlator_t *this, loc_t *loc)          children = priv->children; -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -354,7 +354,7 @@ afr_fstat (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (fd->inode, out); -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -475,7 +475,7 @@ afr_readlink (call_frame_t *frame, xlator_t *this,          children = priv->children; -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -904,7 +904,7 @@ afr_getxattr (call_frame_t *frame, xlator_t *this,          children = priv->children; -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -1111,7 +1111,7 @@ afr_fgetxattr (call_frame_t *frame, xlator_t *this,          children = priv->children; -        ALLOC_OR_GOTO (local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (local, out);          frame->local = local;          op_ret = afr_local_init (local, priv, &op_errno); @@ -1253,7 +1253,7 @@ afr_readv (call_frame_t *frame, xlator_t *this,          priv     = this->private;          children = priv->children; -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); diff --git a/xlators/cluster/afr/src/afr-inode-write.c b/xlators/cluster/afr/src/afr-inode-write.c index 72dcdc4785b..3dc1a418624 100644 --- a/xlators/cluster/afr/src/afr-inode-write.c +++ b/xlators/cluster/afr/src/afr-inode-write.c @@ -457,7 +457,7 @@ afr_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,          QUORUM_CHECK(writev,out); -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -659,7 +659,7 @@ afr_truncate (call_frame_t *frame, xlator_t *this,                  goto out;          } -        ALLOC_OR_GOTO (transaction_frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (transaction_frame->local, out);          local = transaction_frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -899,7 +899,7 @@ afr_ftruncate (call_frame_t *frame, xlator_t *this,          QUORUM_CHECK(ftruncate,out); -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -1100,7 +1100,7 @@ afr_setattr (call_frame_t *frame, xlator_t *this,                  goto out;          } -        ALLOC_OR_GOTO (transaction_frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (transaction_frame->local, out);          local = transaction_frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -1302,7 +1302,7 @@ afr_fsetattr (call_frame_t *frame, xlator_t *this,                  goto out;          } -        ALLOC_OR_GOTO (transaction_frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (transaction_frame->local, out);          local = transaction_frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -1493,7 +1493,7 @@ afr_setxattr (call_frame_t *frame, xlator_t *this,                  goto out;          } -        ALLOC_OR_GOTO (transaction_frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (transaction_frame->local, out);          local = transaction_frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -1675,7 +1675,7 @@ afr_fsetxattr (call_frame_t *frame, xlator_t *this,          QUORUM_CHECK(fsetxattr,out); -        ALLOC_OR_GOTO (local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (local, out);          ret = afr_local_init (local, priv, &op_errno);          if (ret < 0) @@ -1865,7 +1865,7 @@ afr_removexattr (call_frame_t *frame, xlator_t *this,                  goto out;          } -        ALLOC_OR_GOTO (transaction_frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (transaction_frame->local, out);          local = transaction_frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -2040,7 +2040,7 @@ afr_fremovexattr (call_frame_t *frame, xlator_t *this,                  goto out;          } -        ALLOC_OR_GOTO (local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (local, out);          ret = afr_local_init (local, priv, &op_errno);          if (ret < 0) { diff --git a/xlators/cluster/afr/src/afr-lk-common.c b/xlators/cluster/afr/src/afr-lk-common.c index 2fe1349902c..e9a3a430dd0 100644 --- a/xlators/cluster/afr/src/afr-lk-common.c +++ b/xlators/cluster/afr/src/afr-lk-common.c @@ -2187,7 +2187,7 @@ afr_attempt_lock_recovery (xlator_t *this, int32_t child_index)                  goto out;          } -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno);          if (ret < 0) { diff --git a/xlators/cluster/afr/src/afr-mem-types.h b/xlators/cluster/afr/src/afr-mem-types.h index a138c967676..343260a7968 100644 --- a/xlators/cluster/afr/src/afr-mem-types.h +++ b/xlators/cluster/afr/src/afr-mem-types.h @@ -26,7 +26,6 @@  enum gf_afr_mem_types_ {          gf_afr_mt_iovec  = gf_common_mt_end + 1,          gf_afr_mt_afr_fd_ctx_t, -        gf_afr_mt_afr_local_t,          gf_afr_mt_afr_private_t,          gf_afr_mt_int32_t,          gf_afr_mt_char, diff --git a/xlators/cluster/afr/src/afr-open.c b/xlators/cluster/afr/src/afr-open.c index 083e78a2a46..739def351ce 100644 --- a/xlators/cluster/afr/src/afr-open.c +++ b/xlators/cluster/afr/src/afr-open.c @@ -225,7 +225,7 @@ afr_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,                  goto out;          } -        ALLOC_OR_GOTO (frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);          local = frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -394,7 +394,7 @@ afr_fix_open (call_frame_t *frame, xlator_t *this, afr_fd_ctx_t *fd_ctx,                          ret = -ENOMEM;                          goto out;                  } -                ALLOC_OR_GOTO (open_frame->local, afr_local_t, out); +                AFR_LOCAL_ALLOC_OR_GOTO (open_frame->local, out);                  open_local = open_frame->local;                  ret = afr_local_init (open_local, priv, &op_errno);                  if (ret < 0) diff --git a/xlators/cluster/afr/src/afr-self-heal-common.c b/xlators/cluster/afr/src/afr-self-heal-common.c index 36a1e04c9bc..0ff959240bc 100644 --- a/xlators/cluster/afr/src/afr-self-heal-common.c +++ b/xlators/cluster/afr/src/afr-self-heal-common.c @@ -1040,7 +1040,7 @@ afr_impunge_frame_create (call_frame_t *frame, xlator_t *this,                  goto out;          } -        ALLOC_OR_GOTO (impunge_local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (impunge_local, out);          local = frame->local;          new_frame->local = impunge_local; @@ -1350,7 +1350,7 @@ afr_sh_call_entry_expunge_remove (call_frame_t *frame, xlator_t *this,                  goto out;          } -        ALLOC_OR_GOTO (expunge_local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (expunge_local, out);          local = frame->local;          sh = &local->self_heal; @@ -1926,8 +1926,7 @@ afr_local_t *afr_local_copy (afr_local_t *l, xlator_t *this)          sh = &l->self_heal; -        lc = GF_CALLOC (1, sizeof (afr_local_t), -                        gf_afr_mt_afr_local_t); +        lc = mem_get0 (this->local_pool);          if (!lc)                  goto out; diff --git a/xlators/cluster/afr/src/afr-self-heal-entry.c b/xlators/cluster/afr/src/afr-self-heal-entry.c index 6531615dfcf..cccce5db73a 100644 --- a/xlators/cluster/afr/src/afr-self-heal-entry.c +++ b/xlators/cluster/afr/src/afr-self-heal-entry.c @@ -724,7 +724,7 @@ afr_sh_entry_expunge_entry (call_frame_t *frame, xlator_t *this,                  goto out;          } -        ALLOC_OR_GOTO (expunge_local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (expunge_local, out);          expunge_frame->local = expunge_local;          expunge_sh = &expunge_local->self_heal; @@ -1009,7 +1009,7 @@ afr_sh_entry_impunge_setattr (call_frame_t *impunge_frame, xlator_t *this)                  op_errno = ENOMEM;                  goto out;          } -        ALLOC_OR_GOTO (setattr_frame->local, afr_local_t, out); +        AFR_LOCAL_ALLOC_OR_GOTO (setattr_frame->local, out);          setattr_local = setattr_frame->local;          call_count = afr_errno_count (NULL, impunge_sh->child_errno,                                        priv->child_count, 0); diff --git a/xlators/cluster/afr/src/afr.c b/xlators/cluster/afr/src/afr.c index 8e2ef10080e..b73400a7d20 100644 --- a/xlators/cluster/afr/src/afr.c +++ b/xlators/cluster/afr/src/afr.c @@ -214,7 +214,10 @@ init (xlator_t *this)                          "Volume is dangling.");          } -        ALLOC_OR_GOTO (this->private, afr_private_t, out); +	this->private = GF_CALLOC (1, sizeof (afr_private_t), +                                   gf_afr_mt_afr_private_t); +        if (!this->private) +                goto out;          priv = this->private;          LOCK_INIT (&priv->lock); @@ -350,6 +353,15 @@ init (xlator_t *this)                  goto out;          } +        /* keep more local here as we may need them for self-heal etc */ +        this->local_pool = mem_pool_new (afr_local_t, 4096); +        if (!this->local_pool) { +                ret = -1; +                gf_log (this->name, GF_LOG_ERROR, +                        "failed to create local_t's memory pool"); +                goto out; +        } +          priv->first_lookup = 1;          priv->root_inode = NULL; diff --git a/xlators/cluster/afr/src/afr.h b/xlators/cluster/afr/src/afr.h index 0f4a6d90a72..8abc4358352 100644 --- a/xlators/cluster/afr/src/afr.h +++ b/xlators/cluster/afr/src/afr.h @@ -728,15 +728,14 @@ typedef struct {  /* try alloc and if it fails, goto label */ -#define ALLOC_OR_GOTO(var, type, label) do {                    \ -                var = GF_CALLOC (sizeof (type), 1,              \ -                                 gf_afr_mt_##type);             \ -                if (!var) {                                     \ -                        gf_log (this->name, GF_LOG_ERROR,       \ -                                "out of memory :(");            \ -                        op_errno = ENOMEM;                      \ -                        goto label;                             \ -                }                                               \ +#define AFR_LOCAL_ALLOC_OR_GOTO(var, label) do {                    \ +                var = mem_get0 (THIS->local_pool);                  \ +                if (!var) {                                         \ +                        gf_log (this->name, GF_LOG_ERROR,           \ +                                "out of memory :(");                \ +                        op_errno = ENOMEM;                          \ +                        goto label;                                 \ +                }                                                   \          } while (0); @@ -876,20 +875,24 @@ afr_launch_openfd_self_heal (call_frame_t *frame, xlator_t *this, fd_t *fd);                          frame->local = NULL;                    \                  }                                               \                  STACK_UNWIND_STRICT (fop, frame, params);       \ -                afr_local_cleanup (__local, __this);            \ -                GF_FREE (__local);                              \ +                if (__local) {                                  \ +                        afr_local_cleanup (__local, __this);    \ +                        mem_put (__local);                      \ +                }                                               \          } while (0) -#define AFR_STACK_DESTROY(frame)                        \ -        do {                                            \ -                afr_local_t *__local = NULL;            \ -                xlator_t    *__this = NULL;             \ -                __local = frame->local;                 \ -                __this = frame->this;                   \ -                frame->local = NULL;                    \ -                STACK_DESTROY (frame->root);            \ -                afr_local_cleanup (__local, __this);    \ -                GF_FREE (__local);                      \ +#define AFR_STACK_DESTROY(frame)                                \ +        do {                                                    \ +                afr_local_t *__local = NULL;                    \ +                xlator_t    *__this = NULL;                     \ +                __local = frame->local;                         \ +                __this = frame->this;                           \ +                frame->local = NULL;                            \ +                STACK_DESTROY (frame->root);                    \ +                if (__local) {                                  \ +                        afr_local_cleanup (__local, __this);    \ +                        mem_put (__local);                      \ +                }                                               \          } while (0);  #define AFR_NUM_CHANGE_LOGS            3 /*data + metadata + entry*/ diff --git a/xlators/cluster/afr/src/pump.c b/xlators/cluster/afr/src/pump.c index eae7899e9e8..18aee82ccef 100644 --- a/xlators/cluster/afr/src/pump.c +++ b/xlators/cluster/afr/src/pump.c @@ -1400,7 +1400,7 @@ pump_getxattr (call_frame_t *frame, xlator_t *this,          } -	ALLOC_OR_GOTO (frame->local, afr_local_t, out); +	AFR_LOCAL_ALLOC_OR_GOTO (frame->local, out);  	local = frame->local;          ret = afr_local_init (local, priv, &op_errno); @@ -1670,7 +1670,7 @@ pump_setxattr (call_frame_t *frame, xlator_t *this,          } -	ALLOC_OR_GOTO (local, afr_local_t, out); +	AFR_LOCAL_ALLOC_OR_GOTO (local, out);  	ret = afr_local_init (local, priv, &op_errno);  	if (ret < 0) { @@ -2385,7 +2385,10 @@ init (xlator_t *this)  			"Volume is dangling.");  	} -	ALLOC_OR_GOTO (this->private, afr_private_t, out); +	this->private = GF_CALLOC (1, sizeof (afr_private_t), +                                   gf_afr_mt_afr_private_t); +        if (!this->private) +                goto out;  	priv = this->private;          LOCK_INIT (&priv->lock); @@ -2515,6 +2518,15 @@ init (xlator_t *this)                  goto out;          } +        /* keep more local here as we may need them for self-heal etc */ +        this->local_pool = mem_pool_new (afr_local_t, 4096); +        if (!this->local_pool) { +                ret = -1; +                gf_log (this->name, GF_LOG_ERROR, +                        "failed to create local_t's memory pool"); +                goto out; +        } +  	priv->pump_private = pump_priv;          pump_change_state (this, PUMP_STATE_ABORT); diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index 3db75850b39..377f44b955a 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -4050,8 +4050,7 @@ dht_rmdir_is_subvol_empty (call_frame_t *frame, xlator_t *this,                          goto err;                  } -                lookup_local = GF_CALLOC (sizeof (*local), 1, -                                          gf_dht_mt_dht_local_t); +                lookup_local = mem_get0 (this->local_pool);                  if (!lookup_local) {                          goto err;                  } diff --git a/xlators/cluster/dht/src/dht-helper.c b/xlators/cluster/dht/src/dht-helper.c index dea69dd9fd5..ff540013e2c 100644 --- a/xlators/cluster/dht/src/dht-helper.c +++ b/xlators/cluster/dht/src/dht-helper.c @@ -229,7 +229,7 @@ dht_local_wipe (xlator_t *this, dht_local_t *local)          if (local->rebalance.iobref)                  iobref_unref (local->rebalance.iobref); -        GF_FREE (local); +        mem_put (local);  } @@ -240,8 +240,7 @@ dht_local_init (call_frame_t *frame, loc_t *loc, fd_t *fd, glusterfs_fop_t fop)          inode_t     *inode = NULL;          int          ret   = 0; -        /* TODO: use mem-pool */ -        local = GF_CALLOC (1, sizeof (*local), gf_dht_mt_dht_local_t); +        local = mem_get0 (THIS->local_pool);          if (!local)                  goto out; @@ -274,7 +273,7 @@ dht_local_init (call_frame_t *frame, loc_t *loc, fd_t *fd, glusterfs_fop_t fop)  out:          if (ret) {                  if (local) -                        GF_FREE (local); +                        mem_put (local);                  local = NULL;          }          return local; diff --git a/xlators/cluster/dht/src/dht-mem-types.h b/xlators/cluster/dht/src/dht-mem-types.h index a12ed153499..cc01e8f4b09 100644 --- a/xlators/cluster/dht/src/dht-mem-types.h +++ b/xlators/cluster/dht/src/dht-mem-types.h @@ -28,7 +28,6 @@ enum gf_dht_mem_types_ {          gf_dht_mt_dht_conf_t,          gf_dht_mt_char,          gf_dht_mt_int32_t, -        gf_dht_mt_dht_local_t,          gf_dht_mt_xlator_t,          gf_dht_mt_dht_layout_t,          gf_switch_mt_dht_conf_t, diff --git a/xlators/cluster/dht/src/dht.c b/xlators/cluster/dht/src/dht.c index bb6f8c09901..eb55fd46cd5 100644 --- a/xlators/cluster/dht/src/dht.c +++ b/xlators/cluster/dht/src/dht.c @@ -454,6 +454,13 @@ init (xlator_t *this)                  goto err;          } +        this->local_pool = mem_pool_new (dht_local_t, 1024); +        if (!this->local_pool) { +                gf_log (this->name, GF_LOG_ERROR, +                        "failed to create local_t's memory pool"); +                goto err; +        } +          this->private = conf;          return 0; diff --git a/xlators/cluster/dht/src/nufa.c b/xlators/cluster/dht/src/nufa.c index 2f196951a51..63778afcf6e 100644 --- a/xlators/cluster/dht/src/nufa.c +++ b/xlators/cluster/dht/src/nufa.c @@ -626,6 +626,13 @@ init (xlator_t *this)                  goto err;          } +        this->local_pool = mem_pool_new (dht_local_t, 1024); +        if (!this->local_pool) { +                gf_log (this->name, GF_LOG_ERROR, +                        "failed to create local_t's memory pool"); +                goto err; +        } +          this->private = conf;          return 0; diff --git a/xlators/cluster/dht/src/switch.c b/xlators/cluster/dht/src/switch.c index fd3f22ea053..4b5545ffecc 100644 --- a/xlators/cluster/dht/src/switch.c +++ b/xlators/cluster/dht/src/switch.c @@ -933,6 +933,13 @@ init (xlator_t *this)                  goto err;          } +        this->local_pool = mem_pool_new (dht_local_t, 1024); +        if (!this->local_pool) { +                gf_log (this->name, GF_LOG_ERROR, +                        "failed to create local_t's memory pool"); +                goto err; +        } +          this->private = conf;          return 0; diff --git a/xlators/cluster/stripe/src/stripe-mem-types.h b/xlators/cluster/stripe/src/stripe-mem-types.h index 29c95c2571d..d3b3db75294 100644 --- a/xlators/cluster/stripe/src/stripe-mem-types.h +++ b/xlators/cluster/stripe/src/stripe-mem-types.h @@ -25,8 +25,7 @@  #include "mem-types.h"  enum gf_stripe_mem_types_ { -        gf_stripe_mt_stripe_local_t = gf_common_mt_end + 1, -        gf_stripe_mt_iovec, +        gf_stripe_mt_iovec = gf_common_mt_end + 1,          gf_stripe_mt_readv_replies,          gf_stripe_mt_stripe_fd_ctx_t,          gf_stripe_mt_char, diff --git a/xlators/cluster/stripe/src/stripe.c b/xlators/cluster/stripe/src/stripe.c index ec9b6a744a1..fbcf21339e2 100644 --- a/xlators/cluster/stripe/src/stripe.c +++ b/xlators/cluster/stripe/src/stripe.c @@ -327,8 +327,7 @@ stripe_entry_self_heal (call_frame_t *frame, xlator_t *this,          if (!rframe) {                  goto out;          } -        rlocal = GF_CALLOC (1, sizeof (stripe_local_t), -                            gf_stripe_mt_stripe_local_t); +        rlocal = mem_get0 (this->local_pool);          if (!rlocal) {                  goto out;          } @@ -577,8 +576,7 @@ stripe_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc,          trav = this->children;          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -705,8 +703,7 @@ stripe_stat (call_frame_t *frame, xlator_t *this, loc_t *loc)          }          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -791,8 +788,7 @@ stripe_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc)          priv = this->private;          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -908,8 +904,7 @@ stripe_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset)          }          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -1025,8 +1020,7 @@ stripe_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,          }          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -1075,8 +1069,7 @@ stripe_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd,          trav = this->children;          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -1241,8 +1234,7 @@ stripe_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc,          }          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -1380,8 +1372,7 @@ stripe_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc)          }          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -1512,8 +1503,7 @@ stripe_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags)          }          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -1883,8 +1873,7 @@ stripe_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,                  }                  /* Initialization */ -                local = GF_CALLOC (1, sizeof (stripe_local_t), -                                   gf_stripe_mt_stripe_local_t); +                local = mem_get0 (this->local_pool);                  if (!local) {                          op_errno = ENOMEM;                          goto err; @@ -2107,8 +2096,7 @@ stripe_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,          }          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -2231,8 +2219,7 @@ stripe_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc)          }          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -2549,8 +2536,7 @@ stripe_create (call_frame_t *frame, xlator_t *this, loc_t *loc,          }          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -2684,8 +2670,7 @@ stripe_open (call_frame_t *frame, xlator_t *this, loc_t *loc,          }          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -2784,8 +2769,7 @@ stripe_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd)          }          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -2872,8 +2856,7 @@ stripe_lk (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,          priv = this->private;          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -2961,8 +2944,7 @@ stripe_flush (call_frame_t *frame, xlator_t *this, fd_t *fd)                  goto err;          }          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -3069,8 +3051,7 @@ stripe_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags)          trav = this->children;          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -3170,8 +3151,7 @@ stripe_fstat (call_frame_t *frame,          trav = this->children;          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -3210,8 +3190,7 @@ stripe_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset)          trav = this->children;          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -3295,8 +3274,7 @@ stripe_fsyncdir (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags)          trav = this->children;          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -3604,8 +3582,7 @@ stripe_readv (call_frame_t *frame, xlator_t *this, fd_t *fd,          rounded_end = roof (offset+size, stripe_size);          num_stripe = (rounded_end- rounded_start)/stripe_size; -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -3629,8 +3606,7 @@ stripe_readv (call_frame_t *frame, xlator_t *this, fd_t *fd,          for (index = off_index; index < (num_stripe + off_index); index++) {                  rframe = copy_frame (frame); -                rlocal = GF_CALLOC (1, sizeof (stripe_local_t), -                                    gf_stripe_mt_stripe_local_t); +                rlocal = mem_get0 (this->local_pool);                  if (!rlocal) {                          op_errno = ENOMEM;                          goto err; @@ -3743,8 +3719,7 @@ stripe_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,          }          remaining_size = total_size; -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -4028,7 +4003,7 @@ unlock:                  gf_dirent_free (&local->entries);                  stripe_local_wipe (local); -                GF_FREE (local); +                mem_put (local);          }  out:          return 0; @@ -4207,7 +4182,7 @@ out:                                       local->op_errno, &local->entries);                  gf_dirent_free (&local->entries);                  stripe_local_wipe (local); -                GF_FREE (local); +                mem_put (local);          }          return 0; @@ -4236,8 +4211,7 @@ stripe_readdirp (call_frame_t *frame, xlator_t *this,          }          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; @@ -4393,8 +4367,16 @@ init (xlator_t *this)          /* notify related */          priv->nodes_down = priv->child_count; -        this->private = priv; +        this->local_pool = mem_pool_new (stripe_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 out; +        } + +        this->private = priv;          ret = 0;  out: @@ -4702,8 +4684,7 @@ stripe_getxattr (call_frame_t *frame, xlator_t *this,          trav = this->children;          /* Initialization */ -        local = GF_CALLOC (1, sizeof (stripe_local_t), -                           gf_stripe_mt_stripe_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto err; diff --git a/xlators/cluster/stripe/src/stripe.h b/xlators/cluster/stripe/src/stripe.h index 3ab67d62135..8090e2b46c3 100644 --- a/xlators/cluster/stripe/src/stripe.h +++ b/xlators/cluster/stripe/src/stripe.h @@ -42,26 +42,26 @@  #define STRIPE_STACK_UNWIND(fop, frame, params ...) do {           \                  stripe_local_t *__local = NULL;                    \ -                if (frame) {                                    \ -                        __local = frame->local;                 \ -                        frame->local = NULL;                    \ -                }                                               \ -                STACK_UNWIND_STRICT (fop, frame, params);       \ -                if (__local) {                                  \ -                        stripe_local_wipe(__local);             \ -                        GF_FREE (__local);                      \ -                }                                               \ +                if (frame) {                                       \ +                        __local = frame->local;                    \ +                        frame->local = NULL;                       \ +                }                                                  \ +                STACK_UNWIND_STRICT (fop, frame, params);          \ +                if (__local) {                                     \ +                        stripe_local_wipe(__local);                \ +                        mem_put (__local);       \ +                }                                                  \          } while (0) -#define STRIPE_STACK_DESTROY(frame) do {                  \ -                stripe_local_t *__local = NULL;           \ -                __local = frame->local;                   \ -                frame->local = NULL;                      \ -                STACK_DESTROY (frame->root);              \ -                if (__local) {                            \ -                        stripe_local_wipe (__local);      \ -                        GF_FREE (__local);                \ -                }                                         \ +#define STRIPE_STACK_DESTROY(frame) do {                        \ +                stripe_local_t *__local = NULL;                 \ +                __local = frame->local;                         \ +                frame->local = NULL;                            \ +                STACK_DESTROY (frame->root);                    \ +                if (__local) {                                  \ +                        stripe_local_wipe (__local);            \ +                        mem_put (__local);    \ +                }                                               \          } while (0)  typedef struct stripe_xattr_sort { diff --git a/xlators/debug/io-stats/src/io-stats.c b/xlators/debug/io-stats/src/io-stats.c index 888c36dfbf2..5f1e2bb7889 100644 --- a/xlators/debug/io-stats/src/io-stats.c +++ b/xlators/debug/io-stats/src/io-stats.c @@ -1519,6 +1519,10 @@ io_stats_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          }  unwind: +        /* local is assigned with path */ +        if (frame->local) +                GF_FREE (frame->local); +        frame->local = NULL;          STACK_UNWIND_STRICT (mkdir, frame, op_ret, op_errno, inode, buf,                               preparent, postparent);          return 0; diff --git a/xlators/features/locks/src/locks-mem-types.h b/xlators/features/locks/src/locks-mem-types.h index 9d44f0eba10..5b29cbc7257 100644 --- a/xlators/features/locks/src/locks-mem-types.h +++ b/xlators/features/locks/src/locks-mem-types.h @@ -32,7 +32,6 @@ enum gf_locks_mem_types_ {          gf_locks_mt_truncate_ops,          gf_locks_mt_pl_rw_req_t,          gf_locks_mt_posix_locks_private_t, -        gf_locks_mt_pl_local_t,          gf_locks_mt_pl_fdctx_t,          gf_locks_mt_end  }; diff --git a/xlators/features/locks/src/locks.h b/xlators/features/locks/src/locks.h index 0dcbdf97901..653cc4d6b8b 100644 --- a/xlators/features/locks/src/locks.h +++ b/xlators/features/locks/src/locks.h @@ -164,6 +164,12 @@ typedef struct {          gf_boolean_t   entrylk_count_req;          gf_boolean_t   inodelk_count_req;          gf_boolean_t   posixlk_count_req; + +        /* used by {f,}truncate */ +        loc_t  loc; +        fd_t  *fd; +        off_t  offset; +        enum {TRUNCATE, FTRUNCATE} op;  } pl_local_t;  typedef struct { diff --git a/xlators/features/locks/src/posix.c b/xlators/features/locks/src/posix.c index 17bc802a000..b3ea23dfc41 100644 --- a/xlators/features/locks/src/posix.c +++ b/xlators/features/locks/src/posix.c @@ -49,13 +49,6 @@  void do_blocked_rw (pl_inode_t *);  static int __rw_allowable (pl_inode_t *, posix_lock_t *, glusterfs_fop_t); -struct _truncate_ops { -        loc_t  loc; -        fd_t  *fd; -        off_t  offset; -        enum {TRUNCATE, FTRUNCATE} op; -}; -  static pl_fdctx_t *  pl_new_fdctx ()  { @@ -111,7 +104,7 @@ pl_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                   int32_t op_ret, int32_t op_errno, struct iatt *prebuf,                   struct iatt *postbuf)  { -        struct _truncate_ops *local = NULL; +        pl_local_t *local = NULL;          local = frame->local; @@ -163,7 +156,7 @@ truncate_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                     int32_t op_ret, int32_t op_errno, struct iatt *buf)  {          posix_locks_private_t *priv = NULL; -        struct _truncate_ops  *local = NULL; +        pl_local_t            *local = NULL;          inode_t               *inode = NULL;          pl_inode_t            *pl_inode = NULL; @@ -230,10 +223,9 @@ int  pl_truncate (call_frame_t *frame, xlator_t *this,               loc_t *loc, off_t offset)  { -        struct _truncate_ops *local = NULL; +        pl_local_t *local = NULL; -        local = GF_CALLOC (1, sizeof (struct _truncate_ops), -                           gf_locks_mt_truncate_ops); +        local = mem_get0 (this->local_pool);          GF_VALIDATE_OR_GOTO (this->name, local, unwind);          local->op         = TRUNCATE; @@ -260,10 +252,9 @@ int  pl_ftruncate (call_frame_t *frame, xlator_t *this,                fd_t *fd, off_t offset)  { -        struct _truncate_ops *local = NULL; +        pl_local_t *local = NULL; -        local = GF_CALLOC (1, sizeof (struct _truncate_ops), -                           gf_locks_mt_truncate_ops); +        local = mem_get0 (this->local_pool);          GF_VALIDATE_OR_GOTO (this->name, local, unwind);          local->op         = FTRUNCATE; @@ -1576,7 +1567,7 @@ pl_lookup_cbk (call_frame_t *frame,          frame->local = NULL;          if (local != NULL) -                GF_FREE (local); +                mem_put (local);  out:          STACK_UNWIND_STRICT ( @@ -1604,7 +1595,7 @@ pl_lookup (call_frame_t *frame,          VALIDATE_OR_GOTO (this, out);          VALIDATE_OR_GOTO (loc, out); -        local = GF_CALLOC (1, sizeof (*local), gf_locks_mt_pl_local_t); +        local = mem_get0 (this->local_pool);          GF_VALIDATE_OR_GOTO (this->name, local, out);          if (xattr_req) { @@ -1657,7 +1648,7 @@ unwind:          STACK_UNWIND_STRICT (readdirp, frame, op_ret, op_errno, entries);          if (local) -                GF_FREE (local); +                mem_put (local);          return 0;  } @@ -1668,7 +1659,7 @@ pl_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,  {          pl_local_t *local  = NULL; -        local = GF_CALLOC (1, sizeof (*local), gf_locks_mt_pl_local_t); +        local = mem_get0 (this->local_pool);          GF_VALIDATE_OR_GOTO (this->name, local, out);          if (dict) { @@ -2056,6 +2047,14 @@ init (xlator_t *this)                  }          } +        this->local_pool = mem_pool_new (pl_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 out; +        } +          this->private = priv;          ret = 0; diff --git a/xlators/features/marker/src/marker-mem-types.h b/xlators/features/marker/src/marker-mem-types.h index f2723dc26e9..2f49c0d9d4e 100644 --- a/xlators/features/marker/src/marker-mem-types.h +++ b/xlators/features/marker/src/marker-mem-types.h @@ -23,14 +23,12 @@  #include "mem-types.h"  enum gf_marker_mem_types_ { -        gf_marker_mt_marker_local_t = gf_common_mt_end + 1, -        gf_marker_mt_marker_conf_t, +        gf_marker_mt_marker_conf_t = gf_common_mt_end + 1,          gf_marker_mt_loc_t,          gf_marker_mt_volume_mark,          gf_marker_mt_int64_t,          gf_marker_mt_quota_inode_ctx_t,          gf_marker_mt_marker_inode_ctx_t, -        gf_marker_mt_quota_local_t,          gf_marker_mt_inode_contribution_t,          gf_marker_mt_end  }; diff --git a/xlators/features/marker/src/marker-quota-helper.c b/xlators/features/marker/src/marker-quota-helper.c index 7b7c3026f90..8d4ff7786a6 100644 --- a/xlators/features/marker/src/marker-quota-helper.c +++ b/xlators/features/marker/src/marker-quota-helper.c @@ -328,21 +328,15 @@ mq_inode_ctx_new (inode_t * inode, xlator_t *this)  quota_local_t *  mq_local_new ()  { -        int32_t         ret     = -1;          quota_local_t  *local   = NULL; -        QUOTA_ALLOC (local, quota_local_t, ret); -        if (ret < 0) +        local = mem_get0 (THIS->local_pool); +        if (!local)                  goto out;          local->ref = 1; -        local->delta = 0; -        local->err = 0;          LOCK_INIT (&local->lock); -        memset (&local->loc, 0, sizeof (loc_t)); -        memset (&local->parent_loc, 0, sizeof (loc_t)); -          local->ctx = NULL;          local->contri = NULL; @@ -384,7 +378,7 @@ mq_local_unref (xlator_t *this, quota_local_t *local)          LOCK_DESTROY (&local->lock); -        GF_FREE (local); +        mem_put (local);  out:          return 0;  } diff --git a/xlators/features/marker/src/marker-quota-helper.h b/xlators/features/marker/src/marker-quota-helper.h index 56080f0dc21..e019fbd52ad 100644 --- a/xlators/features/marker/src/marker-quota-helper.h +++ b/xlators/features/marker/src/marker-quota-helper.h @@ -23,7 +23,7 @@  #include "config.h"  #endif -#include "marker-quota.h" +#include "marker.h"  #define QUOTA_FREE_CONTRIBUTION_NODE(_contribution)     \          do {                                            \ diff --git a/xlators/features/marker/src/marker-quota.h b/xlators/features/marker/src/marker-quota.h index 7a90b28b7ed..30ee4426449 100644 --- a/xlators/features/marker/src/marker-quota.h +++ b/xlators/features/marker/src/marker-quota.h @@ -24,7 +24,6 @@  #include "config.h"  #endif -#include "marker.h"  #include "xlator.h"  #include "marker-mem-types.h" @@ -104,28 +103,6 @@ struct inode_contribution {  };  typedef struct inode_contribution inode_contribution_t; -struct quota_local { -        int64_t delta; -        int64_t d_off; -        int32_t err; -        int32_t ref; -        int64_t sum; -        int64_t size; -        int32_t hl_count; -        int32_t dentry_child_count; - -        fd_t         *fd; -        call_frame_t *frame; -        gf_lock_t     lock; - -        loc_t loc; -        loc_t parent_loc; - -        quota_inode_ctx_t    *ctx; -        inode_contribution_t *contri; -}; -typedef struct quota_local quota_local_t; -  int32_t  mq_get_lock_on_parent (call_frame_t *, xlator_t *); diff --git a/xlators/features/marker/src/marker.c b/xlators/features/marker/src/marker.c index 54a7e1a28f3..6e384f0b9b4 100644 --- a/xlators/features/marker/src/marker.c +++ b/xlators/features/marker/src/marker.c @@ -177,7 +177,7 @@ marker_local_unref (marker_local_t *local)                  marker_local_unref (local->oplocal);                  local->oplocal = NULL;          } -        GF_FREE (local); +        mem_put (local);  out:          return 0;  } @@ -509,7 +509,7 @@ marker_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,          if (priv->feature_enabled == 0)                  goto wind; -        ALLOCATE_OR_GOTO (local, marker_local_t, err); +        local = mem_get0 (this->local_pool);          MARKER_INIT_LOCAL (frame, local); @@ -580,7 +580,7 @@ marker_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,          if (priv->feature_enabled == 0)                  goto wind; -        ALLOCATE_OR_GOTO (local, marker_local_t, err); +        local = mem_get0 (this->local_pool);          MARKER_INIT_LOCAL (frame, local); @@ -655,7 +655,7 @@ marker_writev (call_frame_t *frame,          if (priv->feature_enabled == 0)                  goto wind; -        ALLOCATE_OR_GOTO (local, marker_local_t, err); +        local = mem_get0 (this->local_pool);          MARKER_INIT_LOCAL (frame, local); @@ -723,7 +723,7 @@ marker_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags)          if (priv->feature_enabled == 0)                  goto wind; -        ALLOCATE_OR_GOTO (local, marker_local_t, err); +        local = mem_get0 (this->local_pool);          MARKER_INIT_LOCAL (frame, local); @@ -820,7 +820,7 @@ marker_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc)          if (priv->feature_enabled == 0)                  goto unlink_wind; -        ALLOCATE_OR_GOTO (local, marker_local_t, err); +        local = mem_get0 (this->local_pool);          MARKER_INIT_LOCAL (frame, local); @@ -897,7 +897,7 @@ marker_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc)          if (priv->feature_enabled == 0)                  goto wind; -        ALLOCATE_OR_GOTO (local, marker_local_t, err); +        local = mem_get0 (this->local_pool);          MARKER_INIT_LOCAL (frame, local); @@ -1412,11 +1412,11 @@ marker_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc,          if (priv->feature_enabled == 0)                  goto rename_wind; -        ALLOCATE_OR_GOTO (local, marker_local_t, err); +        local = mem_get0 (this->local_pool);          MARKER_INIT_LOCAL (frame, local); -        ALLOCATE_OR_GOTO (oplocal, marker_local_t, err); +        oplocal = mem_get0 (this->local_pool);          MARKER_INIT_LOCAL (frame, oplocal); @@ -1533,7 +1533,7 @@ marker_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset)          if (priv->feature_enabled == 0)                  goto wind; -        ALLOCATE_OR_GOTO (local, marker_local_t, err); +        local = mem_get0 (this->local_pool);          MARKER_INIT_LOCAL (frame, local); @@ -1600,7 +1600,7 @@ marker_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset)          if (priv->feature_enabled == 0)                  goto wind; -        ALLOCATE_OR_GOTO (local, marker_local_t, err); +        local = mem_get0 (this->local_pool);          MARKER_INIT_LOCAL (frame, local); @@ -1669,7 +1669,7 @@ marker_symlink (call_frame_t *frame, xlator_t *this, const char *linkpath,          if (priv->feature_enabled == 0)                  goto wind; -        ALLOCATE_OR_GOTO (local, marker_local_t, err); +        local = mem_get0 (this->local_pool);          MARKER_INIT_LOCAL (frame, local); @@ -1739,7 +1739,7 @@ marker_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,          if (priv->feature_enabled == 0)                  goto wind; -        ALLOCATE_OR_GOTO (local, marker_local_t, err); +        local = mem_get0 (this->local_pool);          MARKER_INIT_LOCAL (frame, local); @@ -1869,7 +1869,7 @@ marker_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,          if (ret == 0)                  return 0; -        ALLOCATE_OR_GOTO (local, marker_local_t, err); +        local = mem_get0 (this->local_pool);          MARKER_INIT_LOCAL (frame, local); @@ -1936,7 +1936,7 @@ marker_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,          if (ret == 0)                  return 0; -        ALLOCATE_OR_GOTO (local, marker_local_t, err); +        local = mem_get0 (this->local_pool);          MARKER_INIT_LOCAL (frame, local); @@ -2002,7 +2002,7 @@ marker_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd,          if (priv->feature_enabled == 0)                  goto wind; -        ALLOCATE_OR_GOTO (local, marker_local_t, err); +        local = mem_get0 (this->local_pool);          MARKER_INIT_LOCAL (frame, local); @@ -2070,7 +2070,7 @@ marker_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,          if (priv->feature_enabled == 0)                  goto wind; -        ALLOCATE_OR_GOTO (local, marker_local_t, err); +        local = mem_get0 (this->local_pool);          MARKER_INIT_LOCAL (frame, local); @@ -2133,7 +2133,7 @@ marker_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc,          if (priv->feature_enabled == 0)                  goto wind; -        ALLOCATE_OR_GOTO (local, marker_local_t, err); +        local = mem_get0 (this->local_pool);          MARKER_INIT_LOCAL (frame, local); @@ -2203,7 +2203,7 @@ marker_lookup (call_frame_t *frame, xlator_t *this,          if (priv->feature_enabled == 0)                  goto wind; -        ALLOCATE_OR_GOTO (local, marker_local_t, err); +        local = mem_get0 (this->local_pool);          MARKER_INIT_LOCAL (frame, local); @@ -2241,6 +2241,7 @@ unwind:          return 0;  } +  int  marker_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,                   off_t offset, dict_t *dict) @@ -2503,6 +2504,13 @@ init (xlator_t *this)                  }          } +        this->local_pool = mem_pool_new (marker_local_t, 1024); +        if (!this->local_pool) { +                gf_log (this->name, GF_LOG_ERROR, +                        "failed to create local_t's memory pool"); +                goto err; +        } +          return 0;  err:          marker_priv_cleanup (this); diff --git a/xlators/features/marker/src/marker.h b/xlators/features/marker/src/marker.h index f5ed9df399e..3dcb41f8ad3 100644 --- a/xlators/features/marker/src/marker.h +++ b/xlators/features/marker/src/marker.h @@ -103,9 +103,25 @@ struct marker_local{          call_stub_t    *stub;          int64_t         contribution;          struct marker_local *oplocal; + +        /* marker quota specific */ +        int64_t delta; +        int64_t d_off; +        int64_t sum; +        int64_t size; +        int32_t hl_count; +        int32_t dentry_child_count; + +        fd_t         *fd; +        call_frame_t *frame; + +        quota_inode_ctx_t    *ctx; +        inode_contribution_t *contri;  };  typedef struct marker_local marker_local_t; +#define quota_local_t marker_local_t +  struct marker_inode_ctx {          struct quota_inode_ctx *quota_ctx;  }; 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)     \ diff --git a/xlators/features/trash/src/trash-mem-types.h b/xlators/features/trash/src/trash-mem-types.h index 6608abf6a17..bb2cd33cfe0 100644 --- a/xlators/features/trash/src/trash-mem-types.h +++ b/xlators/features/trash/src/trash-mem-types.h @@ -23,8 +23,7 @@  #include "mem-types.h"  enum gf_trash_mem_types_ { -        gf_trash_mt_trash_local_t = gf_common_mt_end + 1, -        gf_trash_mt_trash_private_t, +        gf_trash_mt_trash_private_t = gf_common_mt_end + 1,          gf_trash_mt_char,          gf_trash_mt_trash_elim_pattern_t,          gf_trash_mt_end diff --git a/xlators/features/trash/src/trash.c b/xlators/features/trash/src/trash.c index 38920db6c71..0aec4bc3d79 100644 --- a/xlators/features/trash/src/trash.c +++ b/xlators/features/trash/src/trash.c @@ -63,7 +63,7 @@ trash_local_wipe (trash_local_t *local)          if (local->newfd)                  fd_unref (local->newfd); -        GF_FREE (local); +        mem_put (local);  out:          return;  } @@ -533,8 +533,7 @@ trash_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc,                  return 0;          } -        local = GF_CALLOC (1, sizeof (trash_local_t),  -                           gf_trash_mt_trash_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  gf_log (this->name, GF_LOG_ERROR, "out of memory");                  TRASH_STACK_UNWIND (rename, frame, -1, ENOMEM, @@ -610,8 +609,7 @@ trash_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc)                  return 0;          } -        local = GF_CALLOC (1, sizeof (trash_local_t), -                           gf_trash_mt_trash_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  gf_log (this->name, GF_LOG_DEBUG, "out of memory");                  TRASH_STACK_UNWIND (unlink, frame, -1, ENOMEM, NULL, NULL); @@ -1044,8 +1042,7 @@ trash_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc,          LOCK_INIT (&frame->lock); -        local = GF_CALLOC (1, sizeof (trash_local_t),  -                           gf_trash_mt_trash_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  gf_log (this->name, GF_LOG_DEBUG, "out of memory");                  TRASH_STACK_UNWIND (truncate, frame, -1, ENOMEM, NULL, NULL); @@ -1385,8 +1382,7 @@ trash_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset)                  return 0;          } -        local = GF_CALLOC (1, sizeof (trash_local_t),  -                           gf_trash_mt_trash_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  gf_log (this->name, GF_LOG_DEBUG, "out of memory");                  TRASH_STACK_UNWIND (ftruncate, frame, -1, ENOMEM, NULL, NULL); @@ -1522,6 +1518,14 @@ init (xlator_t *this)                          _priv->max_trash_file_size);          } +        this->local_pool = mem_pool_new (trash_local_t, 1024); +        if (!this->local_pool) { +                gf_log (this->name, GF_LOG_ERROR, +                        "failed to create local_t's memory pool"); +                return -1; +        } + +          this->private = (void *)_priv;          return 0;  } diff --git a/xlators/performance/io-cache/src/io-cache.c b/xlators/performance/io-cache/src/io-cache.c index 0ab36454c86..d8fa5e9914f 100644 --- a/xlators/performance/io-cache/src/io-cache.c +++ b/xlators/performance/io-cache/src/io-cache.c @@ -275,8 +275,7 @@ ioc_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc,          ioc_local_t *local    = NULL;          int32_t      op_errno = -1, ret = -1; -        local = GF_CALLOC (1, sizeof (*local), -                           gf_ioc_mt_ioc_local_t); +        local = mem_get0 (this->local_pool);          if (local == NULL) {                  op_errno = ENOMEM;                  gf_log (this->name, GF_LOG_ERROR, "out of memory"); @@ -455,8 +454,7 @@ ioc_cache_validate (call_frame_t *frame, ioc_inode_t *ioc_inode, fd_t *fd,          int32_t       ret            = 0;          local = frame->local; -        validate_local = GF_CALLOC (1, sizeof (ioc_local_t), -                                    gf_ioc_mt_ioc_local_t); +        validate_local = mem_get0 (THIS->local_pool);          if (validate_local == NULL) {                  ret = -1;                  local->op_ret = -1; @@ -471,7 +469,7 @@ ioc_cache_validate (call_frame_t *frame, ioc_inode_t *ioc_inode, fd_t *fd,                  ret = -1;                  local->op_ret = -1;                  local->op_errno = ENOMEM; -                GF_FREE (validate_local); +                mem_put (validate_local);                  gf_log (ioc_inode->table->xl->name, GF_LOG_ERROR,                          "out of memory");                  goto out; @@ -589,7 +587,7 @@ ioc_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,          }  out: -        GF_FREE (local); +        mem_put (local);          frame->local = NULL;          STACK_UNWIND_STRICT (open, frame, op_ret, op_errno, fd); @@ -686,7 +684,7 @@ ioc_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  out:          frame->local = NULL; -        GF_FREE (local); +        mem_put (local);          STACK_UNWIND_STRICT (create, frame, op_ret, op_errno, fd, inode, buf,                               preparent, postparent); @@ -739,7 +737,7 @@ out:          frame->local = NULL;          loc_wipe (&local->file_loc); -        GF_FREE (local); +        mem_put (local);          STACK_UNWIND_STRICT (mknod, frame, op_ret, op_errno, inode, buf,                               preparent, postparent); @@ -754,8 +752,7 @@ ioc_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,          ioc_local_t *local    = NULL;          int32_t      op_errno = -1, ret = -1; -        local = GF_CALLOC (1, sizeof (*local), -                           gf_ioc_mt_ioc_local_t); +        local = mem_get0 (this->local_pool);          if (local == NULL) {                  op_errno = ENOMEM;                  gf_log (this->name, GF_LOG_ERROR, "out of memory"); @@ -780,7 +777,7 @@ ioc_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,  unwind:          if (local != NULL) {                  loc_wipe (&local->file_loc); -                GF_FREE (local); +                mem_put (local);          }          STACK_UNWIND_STRICT (mknod, frame, -1, op_errno, NULL, NULL, @@ -805,7 +802,7 @@ ioc_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,          ioc_local_t *local = NULL; -        local = GF_CALLOC (1, sizeof (ioc_local_t), gf_ioc_mt_ioc_local_t); +        local = mem_get0 (this->local_pool);          if (local == NULL) {                  gf_log (this->name, GF_LOG_ERROR, "out of memory");                  STACK_UNWIND_STRICT (open, frame, -1, ENOMEM, NULL); @@ -841,7 +838,7 @@ ioc_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,  {          ioc_local_t *local = NULL; -        local = GF_CALLOC (1, sizeof (ioc_local_t), gf_ioc_mt_ioc_local_t); +        local = mem_get0 (this->local_pool);          if (local == NULL) {                  gf_log (this->name, GF_LOG_ERROR, "out of memory");                  STACK_UNWIND_STRICT (create, frame, -1, ENOMEM, NULL, NULL, @@ -1171,8 +1168,7 @@ ioc_readv (call_frame_t *frame, xlator_t *this, fd_t *fd,                  return 0;          } -        local = (ioc_local_t *) GF_CALLOC (1, sizeof (ioc_local_t), -                                           gf_ioc_mt_ioc_local_t); +        local = mem_get0 (this->local_pool);          if (local == NULL) {                  gf_log (this->name, GF_LOG_ERROR, "out of memory");                  op_errno = ENOMEM; @@ -1256,7 +1252,7 @@ ioc_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,          ioc_local_t *local     = NULL;          uint64_t     ioc_inode = 0; -        local = GF_CALLOC (1, sizeof (ioc_local_t), gf_ioc_mt_ioc_local_t); +        local = mem_get0 (this->local_pool);          if (local == NULL) {                  gf_log (this->name, GF_LOG_ERROR, "out of memory"); @@ -1751,6 +1747,14 @@ init (xlator_t *this)          for (index = 0; index < (table->max_pri); index++)                  INIT_LIST_HEAD (&table->inode_lru[index]); +        this->local_pool = mem_pool_new (ioc_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 out; +        } +          pthread_mutex_init (&table->table_lock, NULL);          this->private = table;          ret = 0; diff --git a/xlators/performance/io-cache/src/ioc-mem-types.h b/xlators/performance/io-cache/src/ioc-mem-types.h index 421485e2698..0cae40b5c7f 100644 --- a/xlators/performance/io-cache/src/ioc-mem-types.h +++ b/xlators/performance/io-cache/src/ioc-mem-types.h @@ -26,7 +26,6 @@ enum gf_ioc_mem_types_ {          gf_ioc_mt_iovec  = gf_common_mt_end + 1,          gf_ioc_mt_ioc_table_t,          gf_ioc_mt_char, -        gf_ioc_mt_ioc_local_t,          gf_ioc_mt_ioc_waitq_t,          gf_ioc_mt_ioc_priority,          gf_ioc_mt_list_head, diff --git a/xlators/performance/io-cache/src/page.c b/xlators/performance/io-cache/src/page.c index 93c4a51de3e..87a78ecda20 100644 --- a/xlators/performance/io-cache/src/page.c +++ b/xlators/performance/io-cache/src/page.c @@ -602,8 +602,7 @@ ioc_page_fault (ioc_inode_t *ioc_inode, call_frame_t *frame, fd_t *fd,                  goto err;          } -        fault_local = GF_CALLOC (1, sizeof (ioc_local_t), -                                 gf_ioc_mt_ioc_local_t); +        fault_local = mem_get0 (THIS->local_pool);          if (fault_local == NULL) {                  op_ret = -1;                  op_errno = ENOMEM; @@ -881,7 +880,7 @@ unwind:          }          pthread_mutex_destroy (&local->local_lock); -        GF_FREE (local); +        mem_put (local);          return;  } diff --git a/xlators/performance/quick-read/src/quick-read-mem-types.h b/xlators/performance/quick-read/src/quick-read-mem-types.h index b6a65e57cb0..68e893a6fac 100644 --- a/xlators/performance/quick-read/src/quick-read-mem-types.h +++ b/xlators/performance/quick-read/src/quick-read-mem-types.h @@ -25,7 +25,6 @@  enum gf_qr_mem_types_ {          gf_qr_mt_qr_inode_t   = gf_common_mt_end + 1,          gf_qr_mt_qr_fd_ctx_t, -        gf_qr_mt_qr_local_t,          gf_qr_mt_iovec,          gf_qr_mt_qr_conf_t,          gf_qr_mt_qr_priority_t, diff --git a/xlators/performance/quick-read/src/quick-read.c b/xlators/performance/quick-read/src/quick-read.c index c1460b1debf..b1b260f5528 100644 --- a/xlators/performance/quick-read/src/quick-read.c +++ b/xlators/performance/quick-read/src/quick-read.c @@ -39,7 +39,7 @@ qr_local_free (qr_local_t *local)                  GF_FREE (local->path);          } -        GF_FREE (local); +        mem_put (local);  out:          return; @@ -450,7 +450,7 @@ qr_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xattr_req)          }          table = &priv->table; -        local = GF_CALLOC (1, sizeof (*local), gf_qr_mt_qr_local_t); +        local = mem_get0 (this->local_pool);          GF_VALIDATE_OR_GOTO_WITH_ERROR (this->name, local, unwind, op_errno,                                          ENOMEM); @@ -683,7 +683,7 @@ qr_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,          tmp_fd_ctx = NULL; -        local = GF_CALLOC (1, sizeof (*local), gf_qr_mt_qr_local_t); +        local = mem_get0 (this->local_pool);          if (local == NULL) {                  op_ret = -1;                  op_errno = ENOMEM; @@ -915,7 +915,7 @@ qr_validate_cache (call_frame_t *frame, xlator_t *this, fd_t *fd,          GF_VALIDATE_OR_GOTO (frame->this->name, stub, out);          if (frame->local == NULL) { -                local = GF_CALLOC (1, sizeof (*local), gf_qr_mt_qr_local_t); +                local = mem_get0 (this->local_pool);                  if (local == NULL) {                          goto out;                  } @@ -1245,9 +1245,7 @@ out:                                          can_wind = 1;                                  } else {                                          if (frame->local == NULL) { -                                                frame->local = GF_CALLOC (1, -                                                                          sizeof (qr_local_t), -                                                                          gf_qr_mt_qr_local_t); +                                                frame->local = mem_get0 (this->local_pool);                                                  if (frame->local == NULL) {                                                          op_ret = -1;                                                          op_errno = ENOMEM; @@ -1432,9 +1430,7 @@ qr_writev (call_frame_t *frame, xlator_t *this, fd_t *fd, struct iovec *vector,                          if (qr_fd_ctx->opened) {                                  can_wind = 1;                          } else { -                                frame->local = GF_CALLOC (1, -                                                          sizeof (qr_local_t), -                                                          gf_qr_mt_qr_local_t); +                                frame->local = mem_get0 (this->local_pool);                                  if (frame->local == NULL) {                                          op_ret = -1;                                          op_errno = ENOMEM; @@ -1587,9 +1583,7 @@ qr_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd)                          if (qr_fd_ctx->opened) {                                  can_wind = 1;                          } else { -                                frame->local = GF_CALLOC (1, -                                                          sizeof (qr_local_t), -                                                          gf_qr_mt_qr_local_t); +                                frame->local = mem_get0 (this->local_pool);                                  if (frame->local == NULL) {                                          op_ret = -1;                                          op_errno = ENOMEM; @@ -1746,9 +1740,7 @@ qr_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd,                          if (qr_fd_ctx->opened) {                                  can_wind = 1;                          } else { -                                frame->local = GF_CALLOC (1, -                                                          sizeof (qr_local_t), -                                                          gf_qr_mt_qr_local_t); +                                frame->local = mem_get0 (this->local_pool);                                  if (frame->local == NULL) {                                          op_ret = -1;                                          op_errno = ENOMEM; @@ -1906,9 +1898,7 @@ qr_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,                          if (qr_fd_ctx->opened) {                                  can_wind = 1;                          } else { -                                frame->local = GF_CALLOC (1, -                                                          sizeof (qr_local_t), -                                                          gf_qr_mt_qr_local_t); +                                frame->local = mem_get0 (this->local_pool);                                  if (frame->local == NULL) {                                          op_ret = -1;                                          op_errno = ENOMEM; @@ -2070,9 +2060,7 @@ qr_fgetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name)                          if (qr_fd_ctx->opened) {                                  can_wind = 1;                          } else { -                                frame->local = GF_CALLOC (1, -                                                          sizeof (qr_local_t), -                                                          gf_qr_mt_qr_local_t); +                                frame->local = mem_get0 (this->local_pool);                                  if (frame->local == NULL) {                                          op_ret = -1;                                          op_errno = ENOMEM; @@ -2213,9 +2201,7 @@ qr_flush (call_frame_t *frame, xlator_t *this, fd_t *fd)                          if (qr_fd_ctx->opened) {                                  can_wind = 1;                          } else if (qr_fd_ctx->open_in_transit) { -                                frame->local = GF_CALLOC (1, -                                                          sizeof (qr_local_t), -                                                          gf_qr_mt_qr_local_t); +                                frame->local = mem_get0 (this->local_pool);                                  if (frame->local == NULL) {                                          op_ret = -1;                                          op_errno = ENOMEM; @@ -2355,9 +2341,7 @@ qr_fentrylk (call_frame_t *frame, xlator_t *this, const char *volume, fd_t *fd,                          if (qr_fd_ctx->opened) {                                  can_wind = 1;                          } else { -                                frame->local = GF_CALLOC (1, -                                                          sizeof (qr_local_t), -                                                          gf_qr_mt_qr_local_t); +                                frame->local = mem_get0 (this->local_pool);                                  if (frame->local == NULL) {                                          op_ret = -1;                                          op_errno = ENOMEM; @@ -2516,9 +2500,7 @@ qr_finodelk (call_frame_t *frame, xlator_t *this, const char *volume, fd_t *fd,                          if (qr_fd_ctx->opened) {                                  can_wind = 1;                          } else { -                                frame->local = GF_CALLOC (1, -                                                          sizeof (qr_local_t), -                                                          gf_qr_mt_qr_local_t); +                                frame->local = mem_get0 (this->local_pool);                                  if (frame->local == NULL) {                                          op_ret = -1;                                          op_errno = ENOMEM; @@ -2673,9 +2655,7 @@ qr_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags)                          if (qr_fd_ctx->opened) {                                  can_wind = 1;                          } else { -                                frame->local = GF_CALLOC (1, -                                                          sizeof (qr_local_t), -                                                          gf_qr_mt_qr_local_t); +                                frame->local = mem_get0 (this->local_pool);                                  if (frame->local == NULL) {                                          op_ret = -1;                                          op_errno = ENOMEM; @@ -2871,7 +2851,7 @@ qr_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset)                  qr_fd_ctx = (qr_fd_ctx_t *)(long)value;          } -        local = GF_CALLOC (1, sizeof (*local), gf_qr_mt_qr_local_t); +        local = mem_get0 (this->local_pool);          if (local == NULL) {                  op_ret = -1;                  op_errno = ENOMEM; @@ -3046,9 +3026,7 @@ qr_lk (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,                          if (qr_fd_ctx->opened) {                                  can_wind = 1;                          } else { -                                frame->local = GF_CALLOC (1, -                                                          sizeof (qr_local_t), -                                                          gf_qr_mt_qr_local_t); +                                frame->local = mem_get0 (this->local_pool);                                  if (frame->local == NULL) {                                          op_ret = -1;                                          op_errno = ENOMEM; @@ -3574,6 +3552,14 @@ init (xlator_t *this)                  INIT_LIST_HEAD (&priv->table.lru[i]);          } +        this->local_pool = mem_pool_new (qr_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 out; +        } +          ret = 0;          this->private = priv; diff --git a/xlators/performance/read-ahead/src/page.c b/xlators/performance/read-ahead/src/page.c index 8aa55c065c5..1e6a92087a5 100644 --- a/xlators/performance/read-ahead/src/page.c +++ b/xlators/performance/read-ahead/src/page.c @@ -233,7 +233,7 @@ unlock:          fd_unref (local->fd); -        GF_FREE (frame->local); +        mem_put (frame->local);          frame->local = NULL;  out: @@ -261,7 +261,7 @@ ra_page_fault (ra_file_t *file, call_frame_t *frame, off_t offset)                  goto err;          } -        fault_local = GF_CALLOC (1, sizeof (ra_local_t), gf_ra_mt_ra_local_t); +        fault_local = mem_get0 (THIS->local_pool);          if (fault_local == NULL) {                  STACK_DESTROY (fault_frame->root);                  op_ret = -1; @@ -451,7 +451,7 @@ ra_frame_unwind (call_frame_t *frame)          iobref_unref (iobref);          pthread_mutex_destroy (&local->local_lock); -        GF_FREE (local); +        mem_put (local);          GF_FREE (vector);  out: diff --git a/xlators/performance/read-ahead/src/read-ahead-mem-types.h b/xlators/performance/read-ahead/src/read-ahead-mem-types.h index 7ca09369653..d2d184f0966 100644 --- a/xlators/performance/read-ahead/src/read-ahead-mem-types.h +++ b/xlators/performance/read-ahead/src/read-ahead-mem-types.h @@ -25,7 +25,6 @@  enum gf_ra_mem_types_ {          gf_ra_mt_ra_file_t   = gf_common_mt_end + 1, -        gf_ra_mt_ra_local_t,          gf_ra_mt_ra_conf_t,          gf_ra_mt_ra_page_t,          gf_ra_mt_ra_waitq_t, diff --git a/xlators/performance/read-ahead/src/read-ahead.c b/xlators/performance/read-ahead/src/read-ahead.c index f58c4078db9..72c7e6aa234 100644 --- a/xlators/performance/read-ahead/src/read-ahead.c +++ b/xlators/performance/read-ahead/src/read-ahead.c @@ -522,7 +522,7 @@ ra_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,                  flush_region (frame, file, 0, file->pages.prev->offset + 1, 0);          } -        local = (void *) GF_CALLOC (1, sizeof (*local), gf_ra_mt_ra_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto unwind; @@ -1061,6 +1061,15 @@ init (xlator_t *this)          conf->files.prev = &conf->files;          pthread_mutex_init (&conf->conf_lock, NULL); + +        this->local_pool = mem_pool_new (ra_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 out; +        } +          this->private = conf;          ret = 0; diff --git a/xlators/performance/write-behind/src/write-behind-mem-types.h b/xlators/performance/write-behind/src/write-behind-mem-types.h index 5a3ee4aed0f..0b03875fda2 100644 --- a/xlators/performance/write-behind/src/write-behind-mem-types.h +++ b/xlators/performance/write-behind/src/write-behind-mem-types.h @@ -25,7 +25,6 @@  enum gf_wb_mem_types_ {          gf_wb_mt_wb_file_t   = gf_common_mt_end + 1, -        gf_wb_mt_wb_local_t,          gf_wb_mt_wb_request_t,          gf_wb_mt_iovec,          gf_wb_mt_wb_conf_t, diff --git a/xlators/performance/write-behind/src/write-behind.c b/xlators/performance/write-behind/src/write-behind.c index a8b1c0c3cff..7cae5405d9e 100644 --- a/xlators/performance/write-behind/src/write-behind.c +++ b/xlators/performance/write-behind/src/write-behind.c @@ -483,8 +483,7 @@ wb_sync (call_frame_t *frame, wb_file_t *file, list_head_t *winds)                                  goto out;                          } -                        local = GF_CALLOC (1, sizeof (*local), -                                           gf_wb_mt_wb_local_t); +                        local = mem_get0 (THIS->local_pool);                          if (local == NULL) {                                  bytes = -1;                                  op_errno = ENOMEM; @@ -579,7 +578,7 @@ out:                          wb_request_unref (request);                  } -                GF_FREE (local); +                mem_put (local);                  local = NULL;          } @@ -722,7 +721,7 @@ wb_stat (call_frame_t *frame, xlator_t *this, loc_t *loc)                  }          } -        local = GF_CALLOC (1, sizeof (*local), gf_wb_mt_wb_local_t); +        local = mem_get0 (this->local_pool);          if (local == NULL) {                  op_errno = ENOMEM;                  goto unwind; @@ -847,8 +846,7 @@ wb_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd)                  }          } -        local = GF_CALLOC (1, sizeof (*local), -                           gf_wb_mt_wb_local_t); +        local = mem_get0 (this->local_pool);          if (local == NULL) {                  op_errno = ENOMEM;                  goto unwind; @@ -1007,8 +1005,7 @@ wb_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset)                  }          } -        local = GF_CALLOC (1, sizeof (*local), -                           gf_wb_mt_wb_local_t); +        local = mem_get0 (this->local_pool);          if (local == NULL) {                  op_errno = ENOMEM;                  goto unwind; @@ -1133,7 +1130,7 @@ wb_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset)                  }          } -        local = GF_CALLOC (1, sizeof (*local), gf_wb_mt_wb_local_t); +        local = mem_get0 (this->local_pool);          if (local == NULL) {                  op_errno = ENOMEM;                  goto unwind; @@ -1275,7 +1272,7 @@ wb_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,          GF_VALIDATE_OR_GOTO (frame->this->name, this, unwind);          GF_VALIDATE_OR_GOTO (frame->this->name, loc, unwind); -        local = GF_CALLOC (1, sizeof (*local), gf_wb_mt_wb_local_t); +        local = mem_get0 (this->local_pool);          if (local == NULL) {                  op_errno = ENOMEM;                  goto unwind; @@ -1431,7 +1428,7 @@ wb_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,          wb_local_t *local    = NULL;          int32_t     op_errno = EINVAL; -        local = GF_CALLOC (1, sizeof (*local), gf_wb_mt_wb_local_t); +        local = mem_get0 (this->local_pool);          if (local == NULL) {                  op_errno = ENOMEM;                  goto unwind; @@ -2177,8 +2174,7 @@ wb_writev (call_frame_t *frame, xlator_t *this, fd_t *fd, struct iovec *vector,                  goto unwind;          } -        local = GF_CALLOC (1, sizeof (*local), -                           gf_wb_mt_wb_local_t); +        local = mem_get0 (this->local_pool);          if (local == NULL) {                  op_errno = ENOMEM;                  goto unwind; @@ -2304,7 +2300,7 @@ wb_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,                  }          } -        local = GF_CALLOC (1, sizeof (*local), gf_wb_mt_wb_local_t); +        local = mem_get0 (this->local_pool);          if (local == NULL) {                  op_errno = ENOMEM;                  goto unwind; @@ -2493,7 +2489,7 @@ wb_flush (call_frame_t *frame, xlator_t *this, fd_t *fd)          }          if (file != NULL) { -                local = GF_CALLOC (1, sizeof (*local), gf_wb_mt_wb_local_t); +                local = mem_get0 (this->local_pool);                  if (local == NULL) {                          op_errno = ENOMEM;                          goto unwind; @@ -2637,7 +2633,7 @@ wb_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync)                  }          } -        local = GF_CALLOC (1, sizeof (*local), gf_wb_mt_wb_local_t); +        local = mem_get0 (this->local_pool);          if (local == NULL) {                  op_errno = ENOMEM;                  goto unwind; @@ -2959,6 +2955,14 @@ init (xlator_t *this)          GF_OPTION_INIT ("enable-trickling-writes", conf->enable_trickling_writes,                          bool, out); +        this->local_pool = mem_pool_new (wb_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 out; +        } +          this->private = conf;          ret = 0; diff --git a/xlators/protocol/client/src/client-handshake.c b/xlators/protocol/client/src/client-handshake.c index 1896e6b6391..e1bcd4e1c55 100644 --- a/xlators/protocol/client/src/client-handshake.c +++ b/xlators/protocol/client/src/client-handshake.c @@ -534,7 +534,7 @@ clnt_fd_lk_local_unref (xlator_t *this, clnt_fd_lk_local_t *local)          if (ref == 0) {                  LOCK_DESTROY (&local->lock); -                GF_FREE (local); +                mem_put (local);          }          ref = 0;  out: @@ -1022,7 +1022,7 @@ protocol_client_reopendir (xlator_t *this, clnt_fd_ctx_t *fdctx)                  goto out;          } -        local = GF_CALLOC (1, sizeof (*local), gf_client_mt_clnt_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  ret = -1;                  goto out; @@ -1108,7 +1108,7 @@ protocol_client_reopen (xlator_t *this, clnt_fd_ctx_t *fdctx)                  goto out;          } -        local = GF_CALLOC (1, sizeof (*local), gf_client_mt_clnt_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  ret = -1;                  goto out; diff --git a/xlators/protocol/client/src/client-helpers.c b/xlators/protocol/client/src/client-helpers.c index 5759f30624e..4c1ac1baa5c 100644 --- a/xlators/protocol/client/src/client-helpers.c +++ b/xlators/protocol/client/src/client-helpers.c @@ -115,7 +115,7 @@ client_local_wipe (clnt_local_t *local)                          iobref_unref (local->iobref);                  } -                 GF_FREE (local); +                 mem_put (local);          }          return 0; diff --git a/xlators/protocol/client/src/client-lk.c b/xlators/protocol/client/src/client-lk.c index e99fe774de6..4e87f7fcd13 100644 --- a/xlators/protocol/client/src/client-lk.c +++ b/xlators/protocol/client/src/client-lk.c @@ -864,7 +864,7 @@ client_attempt_lock_recovery (xlator_t *this, clnt_fd_ctx_t *fdctx)          struct gf_flock reserve_flock;          int ret = 0; -        local = GF_CALLOC (1, sizeof (*local), gf_client_mt_clnt_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  ret = -ENOMEM;                  goto out; diff --git a/xlators/protocol/client/src/client-mem-types.h b/xlators/protocol/client/src/client-mem-types.h index 6bc7daad271..e6e2c8e9fa5 100644 --- a/xlators/protocol/client/src/client-mem-types.h +++ b/xlators/protocol/client/src/client-mem-types.h @@ -25,7 +25,6 @@  enum gf_client_mem_types_ {          gf_client_mt_clnt_conf_t = gf_common_mt_end + 1, -        gf_client_mt_clnt_local_t,          gf_client_mt_clnt_req_buf_t,          gf_client_mt_clnt_fdctx_t,          gf_client_mt_clnt_lock_t, diff --git a/xlators/protocol/client/src/client.c b/xlators/protocol/client/src/client.c index acbc4829bb4..1386a2a1bd1 100644 --- a/xlators/protocol/client/src/client.c +++ b/xlators/protocol/client/src/client.c @@ -2371,6 +2371,14 @@ init (xlator_t *this)                  goto out;          } +        this->local_pool = mem_pool_new (clnt_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 out; +        } +          ret = client_init_rpc (this);  out:          if (ret) diff --git a/xlators/protocol/client/src/client3_1-fops.c b/xlators/protocol/client/src/client3_1-fops.c index 0bc91527aca..8007616629f 100644 --- a/xlators/protocol/client/src/client3_1-fops.c +++ b/xlators/protocol/client/src/client3_1-fops.c @@ -2510,7 +2510,7 @@ client3_1_lookup (call_frame_t *frame, xlator_t *this,          conf = this->private;          args = data; -        local = GF_CALLOC (1, sizeof (*local), gf_client_mt_clnt_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto unwind; @@ -2960,7 +2960,7 @@ client3_1_symlink (call_frame_t *frame, xlator_t *this,                  goto unwind;          args = data; -        local = GF_CALLOC (1, sizeof (*local), gf_client_mt_clnt_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto unwind; @@ -3108,7 +3108,7 @@ client3_1_link (call_frame_t *frame, xlator_t *this,          GF_ASSERT_AND_GOTO_WITH_ERROR (this->name,                                         !uuid_is_null (*((uuid_t*)req.newgfid)),                                         unwind, op_errno, EINVAL); -        local = GF_CALLOC (1, sizeof (*local), gf_client_mt_clnt_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto unwind; @@ -3153,7 +3153,7 @@ client3_1_mknod (call_frame_t *frame, xlator_t *this,          args = data; -        local = GF_CALLOC (1, sizeof (*local), gf_client_mt_clnt_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto unwind; @@ -3229,7 +3229,7 @@ client3_1_mkdir (call_frame_t *frame, xlator_t *this,          args = data; -        local = GF_CALLOC (1, sizeof (*local), gf_client_mt_clnt_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto unwind; @@ -3304,7 +3304,7 @@ client3_1_create (call_frame_t *frame, xlator_t *this,          args = data; -        local = GF_CALLOC (1, sizeof (*local), gf_client_mt_clnt_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto unwind; @@ -3382,7 +3382,7 @@ client3_1_open (call_frame_t *frame, xlator_t *this,          args = data; -        local = GF_CALLOC (1, sizeof (*local), gf_client_mt_clnt_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto unwind; @@ -3489,7 +3489,7 @@ client3_1_readv (call_frame_t *frame, xlator_t *this,                  goto unwind;          } -        local = GF_CALLOC (1, sizeof (*local), gf_client_mt_clnt_local_t); +        local = mem_get0 (this->local_pool);          if (local == NULL) {                  op_errno = ENOMEM;                  goto unwind; @@ -3594,7 +3594,7 @@ client3_1_flush (call_frame_t *frame, xlator_t *this,          conf = this->private; -        local = GF_CALLOC (1, sizeof (*local), gf_client_mt_clnt_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  STACK_UNWIND (frame, -1, ENOMEM);                  return 0; @@ -3721,7 +3721,7 @@ client3_1_opendir (call_frame_t *frame, xlator_t *this,          args = data; -        local = GF_CALLOC (1, sizeof (*local), gf_client_mt_clnt_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto unwind; @@ -3997,8 +3997,7 @@ client3_1_fgetxattr (call_frame_t *frame, xlator_t *this,          CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, op_errno, unwind); -        local = GF_CALLOC (1, sizeof (*local), -                           gf_client_mt_clnt_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto unwind; @@ -4100,8 +4099,7 @@ client3_1_getxattr (call_frame_t *frame, xlator_t *this,                  goto unwind;          } -        local = GF_CALLOC (1, sizeof (*local), -                           gf_client_mt_clnt_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto unwind; @@ -4226,8 +4224,7 @@ client3_1_xattrop (call_frame_t *frame, xlator_t *this,          if (!(args->loc && args->loc->inode))                  goto unwind; -        local = GF_CALLOC (1, sizeof (*local), -                           gf_client_mt_clnt_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto unwind; @@ -4346,8 +4343,7 @@ client3_1_fxattrop (call_frame_t *frame, xlator_t *this,          req.flags  = args->flags;          memcpy (req.gfid, args->fd->inode->gfid, 16); -        local = GF_CALLOC (1, sizeof (*local), -                           gf_client_mt_clnt_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto unwind; @@ -4536,7 +4532,7 @@ client3_1_lk (call_frame_t *frame, xlator_t *this,          args = data;          conf = this->private; -        local = GF_CALLOC (1, sizeof (*local), gf_client_mt_clnt_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto unwind; @@ -4919,8 +4915,7 @@ client3_1_readdir (call_frame_t *frame, xlator_t *this,          if ((readdir_rsp_size + GLUSTERFS_RPC_REPLY_SIZE + GLUSTERFS_RDMA_MAX_HEADER_SIZE)              > (GLUSTERFS_RDMA_INLINE_THRESHOLD)) { -                local = GF_CALLOC (1, sizeof (*local), -                                   gf_client_mt_clnt_local_t); +                local = mem_get0 (this->local_pool);                  if (!local) {                          op_errno = ENOMEM;                          goto unwind; @@ -5022,8 +5017,7 @@ client3_1_readdirp (call_frame_t *frame, xlator_t *this,          readdirp_rsp_size = xdr_sizeof ((xdrproc_t) xdr_gfs3_readdirp_rsp, &rsp)                  + args->size; -        local = GF_CALLOC (1, sizeof (*local), -                           gf_client_mt_clnt_local_t); +        local = mem_get0 (this->local_pool);          if (!local) {                  op_errno = ENOMEM;                  goto unwind; diff --git a/xlators/protocol/legacy/client/src/client-protocol.c b/xlators/protocol/legacy/client/src/client-protocol.c index 5c199e4dc22..804b93a5c14 100644 --- a/xlators/protocol/legacy/client/src/client-protocol.c +++ b/xlators/protocol/legacy/client/src/client-protocol.c @@ -180,7 +180,7 @@ client_local_wipe (client_local_t *local)                  if (local->fd)                          fd_unref (local->fd); -                GF_FREE (local); +                mem_put (local);          }          return 0;  | 
