diff options
| -rw-r--r-- | libglusterfs/src/glusterfs/xlator.h | 3 | ||||
| -rw-r--r-- | libglusterfs/src/libglusterfs.sym | 1 | ||||
| -rw-r--r-- | libglusterfs/src/xlator.c | 21 | ||||
| -rw-r--r-- | xlators/cluster/ec/src/ec-heal.c | 4 | ||||
| -rw-r--r-- | xlators/cluster/ec/src/ec-heald.c | 6 | ||||
| -rw-r--r-- | xlators/cluster/ec/src/ec.c | 3 | 
6 files changed, 38 insertions, 0 deletions
diff --git a/libglusterfs/src/glusterfs/xlator.h b/libglusterfs/src/glusterfs/xlator.h index b7d0249c9c8..1a0ed99774b 100644 --- a/libglusterfs/src/glusterfs/xlator.h +++ b/libglusterfs/src/glusterfs/xlator.h @@ -1092,4 +1092,7 @@ gluster_graph_take_reference(xlator_t *tree);  gf_boolean_t  mgmt_is_multiplexed_daemon(char *name); + +gf_boolean_t +xlator_is_cleanup_starting(xlator_t *this);  #endif /* _XLATOR_H */ diff --git a/libglusterfs/src/libglusterfs.sym b/libglusterfs/src/libglusterfs.sym index 1955005a88f..93ab05f166a 100644 --- a/libglusterfs/src/libglusterfs.sym +++ b/libglusterfs/src/libglusterfs.sym @@ -1164,3 +1164,4 @@ glusterfs_process_svc_attach_volfp  glusterfs_mux_volfile_reconfigure  glusterfs_process_svc_detach  mgmt_is_multiplexed_daemon +xlator_is_cleanup_starting diff --git a/libglusterfs/src/xlator.c b/libglusterfs/src/xlator.c index 292416ae449..526cd2e2e4d 100644 --- a/libglusterfs/src/xlator.c +++ b/libglusterfs/src/xlator.c @@ -1508,3 +1508,24 @@ mgmt_is_multiplexed_daemon(char *name)      }      return _gf_false;  } + +gf_boolean_t +xlator_is_cleanup_starting(xlator_t *this) +{ +    gf_boolean_t cleanup = _gf_false; +    glusterfs_graph_t *graph = NULL; +    xlator_t *xl = NULL; + +    if (!this) +        goto out; +    graph = this->graph; + +    if (!graph) +        goto out; + +    xl = graph->first; +    if (xl && xl->cleanup_starting) +        cleanup = _gf_true; +out: +    return cleanup; +} diff --git a/xlators/cluster/ec/src/ec-heal.c b/xlators/cluster/ec/src/ec-heal.c index 2fa1f11c5fa..8844c292f83 100644 --- a/xlators/cluster/ec/src/ec-heal.c +++ b/xlators/cluster/ec/src/ec-heal.c @@ -2855,6 +2855,10 @@ ec_replace_brick_heal_wrap(void *opaque)          itable = ec->xl->itable;      else          goto out; + +    if (xlator_is_cleanup_starting(ec->xl)) +        goto out; +      ret = ec_replace_heal(ec, itable->root);  out:      return ret; diff --git a/xlators/cluster/ec/src/ec-heald.c b/xlators/cluster/ec/src/ec-heald.c index 985d4854363..5948a588be1 100644 --- a/xlators/cluster/ec/src/ec-heald.c +++ b/xlators/cluster/ec/src/ec-heald.c @@ -444,6 +444,9 @@ unlock:  int  ec_shd_full_healer_spawn(xlator_t *this, int subvol)  { +    if (xlator_is_cleanup_starting(this)) +        return -1; +      return ec_shd_healer_spawn(this, NTH_FULL_HEALER(this, subvol),                                 ec_shd_full_healer);  } @@ -451,6 +454,9 @@ ec_shd_full_healer_spawn(xlator_t *this, int subvol)  int  ec_shd_index_healer_spawn(xlator_t *this, int subvol)  { +    if (xlator_is_cleanup_starting(this)) +        return -1; +      return ec_shd_healer_spawn(this, NTH_INDEX_HEALER(this, subvol),                                 ec_shd_index_healer);  } diff --git a/xlators/cluster/ec/src/ec.c b/xlators/cluster/ec/src/ec.c index 4e9fac5ea39..95100951220 100644 --- a/xlators/cluster/ec/src/ec.c +++ b/xlators/cluster/ec/src/ec.c @@ -486,6 +486,9 @@ ec_set_up_state(ec_t *ec, uintptr_t index_mask, uintptr_t new_state)  {      uintptr_t current_state = 0; +    if (xlator_is_cleanup_starting(ec->xl)) +        return _gf_false; +      if ((ec->xl_notify & index_mask) == 0) {          ec->xl_notify |= index_mask;          ec->xl_notify_count++;  | 
