summaryrefslogtreecommitdiff
path: root/0244-Revert-ec-shd-Cleanup-self-heal-daemon-resources-dur.patch
diff options
context:
space:
mode:
Diffstat (limited to '0244-Revert-ec-shd-Cleanup-self-heal-daemon-resources-dur.patch')
-rw-r--r--0244-Revert-ec-shd-Cleanup-self-heal-daemon-resources-dur.patch292
1 files changed, 292 insertions, 0 deletions
diff --git a/0244-Revert-ec-shd-Cleanup-self-heal-daemon-resources-dur.patch b/0244-Revert-ec-shd-Cleanup-self-heal-daemon-resources-dur.patch
new file mode 100644
index 0000000..0888021
--- /dev/null
+++ b/0244-Revert-ec-shd-Cleanup-self-heal-daemon-resources-dur.patch
@@ -0,0 +1,292 @@
+From f6d967cd70ff41a0f93c54d50128c468e9d5dea9 Mon Sep 17 00:00:00 2001
+From: Mohammed Rafi KC <rkavunga@redhat.com>
+Date: Thu, 11 Jul 2019 12:49:21 +0530
+Subject: [PATCH 244/255] Revert "ec/shd: Cleanup self heal daemon resources
+ during ec fini"
+
+This reverts commit edc238e40060773f5f5fd59fcdad8ae27d65749f.
+
+BUG: 1471742
+Change-Id: If6cb5941b964f005454a21a67938b354ef1a2037
+Signed-off-by: Mohammed Rafi KC <rkavunga@redhat.com>
+Reviewed-on: https://code.engineering.redhat.com/gerrit/175953
+Tested-by: RHGS Build Bot <nigelb@redhat.com>
+Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
+---
+ libglusterfs/src/syncop-utils.c | 2 -
+ xlators/cluster/afr/src/afr-self-heald.c | 5 ---
+ xlators/cluster/ec/src/ec-heald.c | 77 +++++---------------------------
+ xlators/cluster/ec/src/ec-heald.h | 3 --
+ xlators/cluster/ec/src/ec-messages.h | 3 +-
+ xlators/cluster/ec/src/ec.c | 47 -------------------
+ 6 files changed, 13 insertions(+), 124 deletions(-)
+
+diff --git a/libglusterfs/src/syncop-utils.c b/libglusterfs/src/syncop-utils.c
+index 4167db4..b842142 100644
+--- a/libglusterfs/src/syncop-utils.c
++++ b/libglusterfs/src/syncop-utils.c
+@@ -354,8 +354,6 @@ syncop_mt_dir_scan(call_frame_t *frame, xlator_t *subvol, loc_t *loc, int pid,
+
+ if (frame) {
+ this = frame->this;
+- } else {
+- this = THIS;
+ }
+
+ /*For this functionality to be implemented in general, we need
+diff --git a/xlators/cluster/afr/src/afr-self-heald.c b/xlators/cluster/afr/src/afr-self-heald.c
+index 522fe5d..8bc4720 100644
+--- a/xlators/cluster/afr/src/afr-self-heald.c
++++ b/xlators/cluster/afr/src/afr-self-heald.c
+@@ -524,11 +524,6 @@ afr_shd_full_heal(xlator_t *subvol, gf_dirent_t *entry, loc_t *parent,
+ afr_private_t *priv = NULL;
+
+ priv = this->private;
+-
+- if (this->cleanup_starting) {
+- return -ENOTCONN;
+- }
+-
+ if (!priv->shd.enabled)
+ return -EBUSY;
+
+diff --git a/xlators/cluster/ec/src/ec-heald.c b/xlators/cluster/ec/src/ec-heald.c
+index edf5e11..cba111a 100644
+--- a/xlators/cluster/ec/src/ec-heald.c
++++ b/xlators/cluster/ec/src/ec-heald.c
+@@ -71,11 +71,6 @@ disabled_loop:
+ break;
+ }
+
+- if (ec->shutdown) {
+- healer->running = _gf_false;
+- return -1;
+- }
+-
+ ret = healer->rerun;
+ healer->rerun = 0;
+
+@@ -246,11 +241,9 @@ ec_shd_index_sweep(struct subvol_healer *healer)
+ goto out;
+ }
+
+- _mask_cancellation();
+ ret = syncop_mt_dir_scan(NULL, subvol, &loc, GF_CLIENT_PID_SELF_HEALD,
+ healer, ec_shd_index_heal, xdata,
+ ec->shd.max_threads, ec->shd.wait_qlength);
+- _unmask_cancellation();
+ out:
+ if (xdata)
+ dict_unref(xdata);
+@@ -270,11 +263,6 @@ ec_shd_full_heal(xlator_t *subvol, gf_dirent_t *entry, loc_t *parent,
+ int ret = 0;
+
+ ec = this->private;
+-
+- if (this->cleanup_starting) {
+- return -ENOTCONN;
+- }
+-
+ if (ec->xl_up_count <= ec->fragments) {
+ return -ENOTCONN;
+ }
+@@ -317,15 +305,11 @@ ec_shd_full_sweep(struct subvol_healer *healer, inode_t *inode)
+ {
+ ec_t *ec = NULL;
+ loc_t loc = {0};
+- int ret = -1;
+
+ ec = healer->this->private;
+ loc.inode = inode;
+- _mask_cancellation();
+- ret = syncop_ftw(ec->xl_list[healer->subvol], &loc,
+- GF_CLIENT_PID_SELF_HEALD, healer, ec_shd_full_heal);
+- _unmask_cancellation();
+- return ret;
++ return syncop_ftw(ec->xl_list[healer->subvol], &loc,
++ GF_CLIENT_PID_SELF_HEALD, healer, ec_shd_full_heal);
+ }
+
+ void *
+@@ -333,16 +317,13 @@ ec_shd_index_healer(void *data)
+ {
+ struct subvol_healer *healer = NULL;
+ xlator_t *this = NULL;
+- int run = 0;
+
+ healer = data;
+ THIS = this = healer->this;
+ ec_t *ec = this->private;
+
+ for (;;) {
+- run = ec_shd_healer_wait(healer);
+- if (run == -1)
+- break;
++ ec_shd_healer_wait(healer);
+
+ if (ec->xl_up_count > ec->fragments) {
+ gf_msg_debug(this->name, 0, "starting index sweep on subvol %s",
+@@ -371,12 +352,16 @@ ec_shd_full_healer(void *data)
+
+ rootloc.inode = this->itable->root;
+ for (;;) {
+- run = ec_shd_healer_wait(healer);
+- if (run < 0) {
+- break;
+- } else if (run == 0) {
+- continue;
++ pthread_mutex_lock(&healer->mutex);
++ {
++ run = __ec_shd_healer_wait(healer);
++ if (!run)
++ healer->running = _gf_false;
+ }
++ pthread_mutex_unlock(&healer->mutex);
++
++ if (!run)
++ break;
+
+ if (ec->xl_up_count > ec->fragments) {
+ gf_msg(this->name, GF_LOG_INFO, 0, EC_MSG_FULL_SWEEP_START,
+@@ -577,41 +562,3 @@ out:
+ dict_del(output, this->name);
+ return ret;
+ }
+-
+-void
+-ec_destroy_healer_object(xlator_t *this, struct subvol_healer *healer)
+-{
+- if (!healer)
+- return;
+-
+- pthread_cond_destroy(&healer->cond);
+- pthread_mutex_destroy(&healer->mutex);
+-}
+-
+-void
+-ec_selfheal_daemon_fini(xlator_t *this)
+-{
+- struct subvol_healer *healer = NULL;
+- ec_self_heald_t *shd = NULL;
+- ec_t *priv = NULL;
+- int i = 0;
+-
+- priv = this->private;
+- if (!priv)
+- return;
+-
+- shd = &priv->shd;
+- if (!shd->iamshd)
+- return;
+-
+- for (i = 0; i < priv->nodes; i++) {
+- healer = &shd->index_healers[i];
+- ec_destroy_healer_object(this, healer);
+-
+- healer = &shd->full_healers[i];
+- ec_destroy_healer_object(this, healer);
+- }
+-
+- GF_FREE(shd->index_healers);
+- GF_FREE(shd->full_healers);
+-}
+diff --git a/xlators/cluster/ec/src/ec-heald.h b/xlators/cluster/ec/src/ec-heald.h
+index 8184cf4..2eda2a7 100644
+--- a/xlators/cluster/ec/src/ec-heald.h
++++ b/xlators/cluster/ec/src/ec-heald.h
+@@ -24,7 +24,4 @@ ec_selfheal_daemon_init(xlator_t *this);
+ void
+ ec_shd_index_healer_wake(ec_t *ec);
+
+-void
+-ec_selfheal_daemon_fini(xlator_t *this);
+-
+ #endif /* __EC_HEALD_H__ */
+diff --git a/xlators/cluster/ec/src/ec-messages.h b/xlators/cluster/ec/src/ec-messages.h
+index ce299bb..7c28808 100644
+--- a/xlators/cluster/ec/src/ec-messages.h
++++ b/xlators/cluster/ec/src/ec-messages.h
+@@ -55,7 +55,6 @@ GLFS_MSGID(EC, EC_MSG_INVALID_CONFIG, EC_MSG_HEAL_FAIL,
+ EC_MSG_CONFIG_XATTR_INVALID, EC_MSG_EXTENSION, EC_MSG_EXTENSION_NONE,
+ EC_MSG_EXTENSION_UNKNOWN, EC_MSG_EXTENSION_UNSUPPORTED,
+ EC_MSG_EXTENSION_FAILED, EC_MSG_NO_GF, EC_MSG_MATRIX_FAILED,
+- EC_MSG_DYN_CREATE_FAILED, EC_MSG_DYN_CODEGEN_FAILED,
+- EC_MSG_THREAD_CLEANUP_FAILED);
++ EC_MSG_DYN_CREATE_FAILED, EC_MSG_DYN_CODEGEN_FAILED);
+
+ #endif /* !_EC_MESSAGES_H_ */
+diff --git a/xlators/cluster/ec/src/ec.c b/xlators/cluster/ec/src/ec.c
+index 264582a..3c8013e 100644
+--- a/xlators/cluster/ec/src/ec.c
++++ b/xlators/cluster/ec/src/ec.c
+@@ -429,51 +429,6 @@ ec_disable_delays(ec_t *ec)
+ }
+
+ void
+-ec_cleanup_healer_object(ec_t *ec)
+-{
+- struct subvol_healer *healer = NULL;
+- ec_self_heald_t *shd = NULL;
+- void *res = NULL;
+- int i = 0;
+- gf_boolean_t is_join = _gf_false;
+-
+- shd = &ec->shd;
+- if (!shd->iamshd)
+- return;
+-
+- for (i = 0; i < ec->nodes; i++) {
+- healer = &shd->index_healers[i];
+- pthread_mutex_lock(&healer->mutex);
+- {
+- healer->rerun = 1;
+- if (healer->running) {
+- pthread_cond_signal(&healer->cond);
+- is_join = _gf_true;
+- }
+- }
+- pthread_mutex_unlock(&healer->mutex);
+- if (is_join) {
+- pthread_join(healer->thread, &res);
+- is_join = _gf_false;
+- }
+-
+- healer = &shd->full_healers[i];
+- pthread_mutex_lock(&healer->mutex);
+- {
+- healer->rerun = 1;
+- if (healer->running) {
+- pthread_cond_signal(&healer->cond);
+- is_join = _gf_true;
+- }
+- }
+- pthread_mutex_unlock(&healer->mutex);
+- if (is_join) {
+- pthread_join(healer->thread, &res);
+- is_join = _gf_false;
+- }
+- }
+-}
+-void
+ ec_pending_fops_completed(ec_t *ec)
+ {
+ if (ec->shutdown) {
+@@ -589,7 +544,6 @@ ec_notify(xlator_t *this, int32_t event, void *data, void *data2)
+ /* If there aren't pending fops running after we have waken up
+ * them, we immediately propagate the notification. */
+ propagate = ec_disable_delays(ec);
+- ec_cleanup_healer_object(ec);
+ goto unlock;
+ }
+
+@@ -805,7 +759,6 @@ failed:
+ void
+ fini(xlator_t *this)
+ {
+- ec_selfheal_daemon_fini(this);
+ __ec_destroy_private(this);
+ }
+
+--
+1.8.3.1
+