From 0ef7e763c85c045ef7937d0ca02d8c5f0333e6e8 Mon Sep 17 00:00:00 2001 From: Amar Tumballi Date: Tue, 21 Feb 2012 14:47:48 +0530 Subject: 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 BUG: 765336 Reviewed-on: http://review.gluster.com/2772 Tested-by: Gluster Build System Reviewed-by: Anand Avati --- cli/src/cli-cmd-volume.c | 2 +- libglusterfs/src/mem-pool.c | 6 +- libglusterfs/src/stack.h | 4 +- libglusterfs/src/xlator.c | 3 + libglusterfs/src/xlator.h | 3 + xlators/cluster/afr/src/afr-common.c | 24 +++--- xlators/cluster/afr/src/afr-dir-read.c | 4 +- xlators/cluster/afr/src/afr-dir-write.c | 16 ++-- xlators/cluster/afr/src/afr-inode-read.c | 14 ++-- xlators/cluster/afr/src/afr-inode-write.c | 18 ++-- xlators/cluster/afr/src/afr-lk-common.c | 2 +- xlators/cluster/afr/src/afr-mem-types.h | 1 - xlators/cluster/afr/src/afr-open.c | 4 +- xlators/cluster/afr/src/afr-self-heal-common.c | 7 +- xlators/cluster/afr/src/afr-self-heal-entry.c | 4 +- xlators/cluster/afr/src/afr.c | 14 +++- xlators/cluster/afr/src/afr.h | 45 +++++----- xlators/cluster/afr/src/pump.c | 18 +++- xlators/cluster/dht/src/dht-common.c | 3 +- xlators/cluster/dht/src/dht-helper.c | 7 +- xlators/cluster/dht/src/dht-mem-types.h | 1 - xlators/cluster/dht/src/dht.c | 7 ++ xlators/cluster/dht/src/nufa.c | 7 ++ xlators/cluster/dht/src/switch.c | 7 ++ xlators/cluster/stripe/src/stripe-mem-types.h | 3 +- xlators/cluster/stripe/src/stripe.c | 95 +++++++++------------- xlators/cluster/stripe/src/stripe.h | 36 ++++---- xlators/debug/io-stats/src/io-stats.c | 4 + xlators/features/locks/src/locks-mem-types.h | 1 - xlators/features/locks/src/locks.h | 6 ++ xlators/features/locks/src/posix.c | 37 ++++----- xlators/features/marker/src/marker-mem-types.h | 4 +- xlators/features/marker/src/marker-quota-helper.c | 12 +-- xlators/features/marker/src/marker-quota-helper.h | 2 +- xlators/features/marker/src/marker-quota.h | 23 ------ xlators/features/marker/src/marker.c | 46 ++++++----- xlators/features/marker/src/marker.h | 16 ++++ xlators/features/quota/src/quota-mem-types.h | 3 +- xlators/features/quota/src/quota.c | 19 +++-- xlators/features/quota/src/quota.h | 8 +- xlators/features/trash/src/trash-mem-types.h | 3 +- xlators/features/trash/src/trash.c | 22 +++-- xlators/performance/io-cache/src/io-cache.c | 36 ++++---- xlators/performance/io-cache/src/ioc-mem-types.h | 1 - xlators/performance/io-cache/src/page.c | 5 +- .../quick-read/src/quick-read-mem-types.h | 1 - xlators/performance/quick-read/src/quick-read.c | 62 ++++++-------- xlators/performance/read-ahead/src/page.c | 6 +- .../read-ahead/src/read-ahead-mem-types.h | 1 - xlators/performance/read-ahead/src/read-ahead.c | 11 ++- .../write-behind/src/write-behind-mem-types.h | 1 - .../performance/write-behind/src/write-behind.c | 36 ++++---- xlators/protocol/client/src/client-handshake.c | 6 +- xlators/protocol/client/src/client-helpers.c | 2 +- xlators/protocol/client/src/client-lk.c | 2 +- xlators/protocol/client/src/client-mem-types.h | 1 - xlators/protocol/client/src/client.c | 8 ++ xlators/protocol/client/src/client3_1-fops.c | 40 ++++----- .../protocol/legacy/client/src/client-protocol.c | 2 +- 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; -- cgit