diff options
Diffstat (limited to 'xlators/cluster/afr/src/afr-self-heal-metadata.c')
-rw-r--r-- | xlators/cluster/afr/src/afr-self-heal-metadata.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/xlators/cluster/afr/src/afr-self-heal-metadata.c b/xlators/cluster/afr/src/afr-self-heal-metadata.c index 7abd852de6c..6cefc8d0fb0 100644 --- a/xlators/cluster/afr/src/afr-self-heal-metadata.c +++ b/xlators/cluster/afr/src/afr-self-heal-metadata.c @@ -591,6 +591,7 @@ afr_sh_metadata_fix (call_frame_t *frame, xlator_t *this, int nsources = 0; int source = 0; int i = 0; + gf_boolean_t xattrs_match = _gf_false; local = frame->local; sh = &local->self_heal; @@ -652,6 +653,9 @@ afr_sh_metadata_fix (call_frame_t *frame, xlator_t *this, sh->source = source; /* detect changes not visible through pending flags -- JIC */ + xattrs_match = afr_lookup_xattrs_are_equal (sh->xattr, + sh->success_children, + sh->success_count); for (i = 0; i < priv->child_count; i++) { if (i == source || sh->child_errno[i]) continue; @@ -661,6 +665,8 @@ afr_sh_metadata_fix (call_frame_t *frame, xlator_t *this, if (OWNERSHIP_DIFFERS (&sh->buf[i], &sh->buf[source])) sh->sources[i] = 0; + if(!xattrs_match) + sh->sources[i] = 0; } if ((!IA_ISREG (sh->buf[source].ia_type)) && |