summaryrefslogtreecommitdiffstats
path: root/xlators/features/trash/src
diff options
context:
space:
mode:
authorMohit Agrawal <moagrawa@redhat.com>2018-02-10 12:25:15 +0530
committerAmar Tumballi <amarts@redhat.com>2018-02-27 07:11:15 +0000
commit7c3cc485054e4ede1efb358552135b432fb7047a (patch)
tree5657500860f795b7c895bce14069545d8ba463e2 /xlators/features/trash/src
parent430bff7dc330eec9447423e95f2cae49744a79c3 (diff)
glusterfsd: Memleak in glusterfsd process while brick mux is on
Problem: At the time of stopping the volume while brick multiplex is enabled memory is not cleanup from all server side xlators. Solution: To cleanup memory for all server side xlators call fini in glusterfs_handle_terminate after send GF_EVENT_CLEANUP notification to top xlator. BUG: 1544090 Signed-off-by: Mohit Agrawal <moagrawa@redhat.com> Note: Run all test-cases in separate build (https://review.gluster.org/19574) with same patch after enable brick mux forcefully, all test cases are passed. Change-Id: Ia10dc7f2605aa50f2b90b3fe4eb380ba9299e2fc
Diffstat (limited to 'xlators/features/trash/src')
-rw-r--r--xlators/features/trash/src/trash.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/xlators/features/trash/src/trash.c b/xlators/features/trash/src/trash.c
index cfdcc6ff5fc..e8f8b7bf051 100644
--- a/xlators/features/trash/src/trash.c
+++ b/xlators/features/trash/src/trash.c
@@ -33,7 +33,6 @@ trash_unlink_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
struct iatt *preoldparent, struct iatt *postoldparent,
struct iatt *prenewparent, struct iatt *postnewparent,
dict_t *xdata);
-
/* Common routines used in this translator */
/**
@@ -2431,6 +2430,7 @@ notify (xlator_t *this, int event, void *data, ...)
ret = create_internalop_directory (this);
}
+
out:
ret = default_notify (this, event, data);
if (ret)
@@ -2612,10 +2612,11 @@ void
fini (xlator_t *this)
{
trash_private_t *priv = NULL;
+ inode_table_t *inode_table = NULL;
GF_VALIDATE_OR_GOTO ("trash", this, out);
priv = this->private;
-
+ inode_table = priv->trash_itable;
if (priv) {
if (priv->newtrash_dir)
GF_FREE (priv->newtrash_dir);
@@ -2625,9 +2626,17 @@ fini (xlator_t *this)
GF_FREE (priv->brick_path);
if (priv->eliminate)
wipe_eliminate_path (&priv->eliminate);
+ if (inode_table) {
+ inode_table_destroy (inode_table);
+ priv->trash_itable = NULL;
+ }
GF_FREE (priv);
}
- mem_pool_destroy (this->local_pool);
+
+ if (this->local_pool) {
+ mem_pool_destroy (this->local_pool);
+ this->local_pool = NULL;
+ }
this->private = NULL;
out:
return;