diff options
Diffstat (limited to 'xlators/cluster/afr/src/afr-self-heald.c')
-rw-r--r-- | xlators/cluster/afr/src/afr-self-heald.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/xlators/cluster/afr/src/afr-self-heald.c b/xlators/cluster/afr/src/afr-self-heald.c index 53d7ef8bb8e..e2de77a9c45 100644 --- a/xlators/cluster/afr/src/afr-self-heald.c +++ b/xlators/cluster/afr/src/afr-self-heald.c @@ -787,6 +787,18 @@ unref: afr_ta_post_op_unlock(this, loc); } +gf_boolean_t +afr_bricks_available_for_heal(afr_private_t *priv) +{ + int up_children = 0; + + up_children = __afr_get_up_children_count(priv); + if (up_children < 2) { + return _gf_false; + } + return _gf_true; +} + void * afr_shd_index_healer(void *data) { @@ -806,6 +818,9 @@ afr_shd_index_healer(void *data) for (;;) { afr_shd_healer_wait(healer); + if (!afr_bricks_available_for_heal(priv)) + continue; + ASSERT_LOCAL(this, healer); priv->local[healer->subvol] = healer->local; |