summaryrefslogtreecommitdiff
path: root/0220-graph-shd-Use-top-down-approach-while-cleaning-xlato.patch
diff options
context:
space:
mode:
Diffstat (limited to '0220-graph-shd-Use-top-down-approach-while-cleaning-xlato.patch')
-rw-r--r--0220-graph-shd-Use-top-down-approach-while-cleaning-xlato.patch190
1 files changed, 190 insertions, 0 deletions
diff --git a/0220-graph-shd-Use-top-down-approach-while-cleaning-xlato.patch b/0220-graph-shd-Use-top-down-approach-while-cleaning-xlato.patch
new file mode 100644
index 0000000..07f702b
--- /dev/null
+++ b/0220-graph-shd-Use-top-down-approach-while-cleaning-xlato.patch
@@ -0,0 +1,190 @@
+From b963fa8bb71963127147d33bf609f439dd5bd107 Mon Sep 17 00:00:00 2001
+From: Mohammed Rafi KC <rkavunga@redhat.com>
+Date: Thu, 27 Jun 2019 19:17:29 +0530
+Subject: [PATCH 220/221] graph/shd: Use top down approach while cleaning
+ xlator
+
+We were cleaning xlator from botton to top, which might
+lead to problems when upper xlators trying to access
+the xlator object loaded below.
+
+One such scenario is when fd_unref happens as part of the
+fini call which might lead to calling the releasedir to
+lower xlator. This will lead to invalid mem access
+
+Backport of:https://review.gluster.org/#/c/glusterfs/+/22968/
+
+>Change-Id: I8a6cb619256fab0b0c01a2d564fc88287c4415a0
+>Updates: bz#1716695
+>Signed-off-by: Mohammed Rafi KC <rkavunga@redhat.com>
+
+Change-Id: I22bbf99e9451183b3e0fe61b57b2440ab4163fe5
+BUG: 1711939
+Signed-off-by: Mohammed Rafi KC <rkavunga@redhat.com>
+Reviewed-on: https://code.engineering.redhat.com/gerrit/174882
+Tested-by: RHGS Build Bot <nigelb@redhat.com>
+Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
+---
+ libglusterfs/src/graph.c | 10 +++++++++-
+ xlators/features/bit-rot/src/stub/bit-rot-stub.c | 1 +
+ xlators/features/changelog/src/changelog.c | 1 +
+ xlators/features/cloudsync/src/cloudsync.c | 4 +++-
+ xlators/features/index/src/index.c | 1 +
+ xlators/features/quiesce/src/quiesce.c | 1 +
+ xlators/features/read-only/src/worm.c | 1 +
+ xlators/features/sdfs/src/sdfs.c | 1 +
+ xlators/features/selinux/src/selinux.c | 2 ++
+ xlators/features/trash/src/trash.c | 1 +
+ 10 files changed, 21 insertions(+), 2 deletions(-)
+
+diff --git a/libglusterfs/src/graph.c b/libglusterfs/src/graph.c
+index 5b95fd6..172dc61 100644
+--- a/libglusterfs/src/graph.c
++++ b/libglusterfs/src/graph.c
+@@ -1193,6 +1193,14 @@ glusterfs_graph_fini(glusterfs_graph_t *graph)
+ if (trav->init_succeeded) {
+ trav->cleanup_starting = 1;
+ trav->fini(trav);
++ if (trav->local_pool) {
++ mem_pool_destroy(trav->local_pool);
++ trav->local_pool = NULL;
++ }
++ if (trav->itable) {
++ inode_table_destroy(trav->itable);
++ trav->itable = NULL;
++ }
+ trav->init_succeeded = 0;
+ }
+ trav = trav->next;
+@@ -1394,7 +1402,7 @@ glusterfs_graph_cleanup(void *arg)
+
+ pthread_mutex_lock(&ctx->cleanup_lock);
+ {
+- glusterfs_graph_deactivate(graph);
++ glusterfs_graph_fini(graph);
+ glusterfs_graph_destroy(graph);
+ }
+ pthread_mutex_unlock(&ctx->cleanup_lock);
+diff --git a/xlators/features/bit-rot/src/stub/bit-rot-stub.c b/xlators/features/bit-rot/src/stub/bit-rot-stub.c
+index 3f48a4b..03446be 100644
+--- a/xlators/features/bit-rot/src/stub/bit-rot-stub.c
++++ b/xlators/features/bit-rot/src/stub/bit-rot-stub.c
+@@ -185,6 +185,7 @@ cleanup_lock:
+ pthread_mutex_destroy(&priv->lock);
+ free_mempool:
+ mem_pool_destroy(priv->local_pool);
++ priv->local_pool = NULL;
+ free_priv:
+ GF_FREE(priv);
+ this->private = NULL;
+diff --git a/xlators/features/changelog/src/changelog.c b/xlators/features/changelog/src/changelog.c
+index d9025f3..2862d1e 100644
+--- a/xlators/features/changelog/src/changelog.c
++++ b/xlators/features/changelog/src/changelog.c
+@@ -2790,6 +2790,7 @@ cleanup_options:
+ changelog_freeup_options(this, priv);
+ cleanup_mempool:
+ mem_pool_destroy(this->local_pool);
++ this->local_pool = NULL;
+ cleanup_priv:
+ GF_FREE(priv);
+ error_return:
+diff --git a/xlators/features/cloudsync/src/cloudsync.c b/xlators/features/cloudsync/src/cloudsync.c
+index 26e512c..0ad987e 100644
+--- a/xlators/features/cloudsync/src/cloudsync.c
++++ b/xlators/features/cloudsync/src/cloudsync.c
+@@ -200,8 +200,10 @@ cs_init(xlator_t *this)
+
+ out:
+ if (ret == -1) {
+- if (this->local_pool)
++ if (this->local_pool) {
+ mem_pool_destroy(this->local_pool);
++ this->local_pool = NULL;
++ }
+
+ cs_cleanup_private(priv);
+
+diff --git a/xlators/features/index/src/index.c b/xlators/features/index/src/index.c
+index 2f2a6d0..4ece7ff 100644
+--- a/xlators/features/index/src/index.c
++++ b/xlators/features/index/src/index.c
+@@ -2478,6 +2478,7 @@ out:
+ GF_FREE(priv);
+ this->private = NULL;
+ mem_pool_destroy(this->local_pool);
++ this->local_pool = NULL;
+ }
+
+ if (attr_inited)
+diff --git a/xlators/features/quiesce/src/quiesce.c b/xlators/features/quiesce/src/quiesce.c
+index bfd1116..06f58c9 100644
+--- a/xlators/features/quiesce/src/quiesce.c
++++ b/xlators/features/quiesce/src/quiesce.c
+@@ -2536,6 +2536,7 @@ fini(xlator_t *this)
+ this->private = NULL;
+
+ mem_pool_destroy(priv->local_pool);
++ priv->local_pool = NULL;
+ LOCK_DESTROY(&priv->lock);
+ GF_FREE(priv);
+ out:
+diff --git a/xlators/features/read-only/src/worm.c b/xlators/features/read-only/src/worm.c
+index 24196f8..7d13180 100644
+--- a/xlators/features/read-only/src/worm.c
++++ b/xlators/features/read-only/src/worm.c
+@@ -569,6 +569,7 @@ fini(xlator_t *this)
+ mem_put(priv);
+ this->private = NULL;
+ mem_pool_destroy(this->local_pool);
++ this->local_pool = NULL;
+ out:
+ return;
+ }
+diff --git a/xlators/features/sdfs/src/sdfs.c b/xlators/features/sdfs/src/sdfs.c
+index f0247fd..164c632 100644
+--- a/xlators/features/sdfs/src/sdfs.c
++++ b/xlators/features/sdfs/src/sdfs.c
+@@ -1429,6 +1429,7 @@ void
+ fini(xlator_t *this)
+ {
+ mem_pool_destroy(this->local_pool);
++ this->local_pool = NULL;
+ return;
+ }
+
+diff --git a/xlators/features/selinux/src/selinux.c b/xlators/features/selinux/src/selinux.c
+index 58b4c5d..ce5fc90 100644
+--- a/xlators/features/selinux/src/selinux.c
++++ b/xlators/features/selinux/src/selinux.c
+@@ -256,6 +256,7 @@ out:
+ GF_FREE(priv);
+ }
+ mem_pool_destroy(this->local_pool);
++ this->local_pool = NULL;
+ }
+ return ret;
+ }
+@@ -284,6 +285,7 @@ fini(xlator_t *this)
+ GF_FREE(priv);
+
+ mem_pool_destroy(this->local_pool);
++ this->local_pool = NULL;
+
+ return;
+ }
+diff --git a/xlators/features/trash/src/trash.c b/xlators/features/trash/src/trash.c
+index d668436..eb5007b 100644
+--- a/xlators/features/trash/src/trash.c
++++ b/xlators/features/trash/src/trash.c
+@@ -2523,6 +2523,7 @@ out:
+ GF_FREE(priv);
+ }
+ mem_pool_destroy(this->local_pool);
++ this->local_pool = NULL;
+ }
+ return ret;
+ }
+--
+1.8.3.1
+