diff options
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/cluster/afr/src/afr-common.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c index 2925a1dc1da..9c96056a723 100644 --- a/xlators/cluster/afr/src/afr-common.c +++ b/xlators/cluster/afr/src/afr-common.c @@ -730,6 +730,7 @@ afr_set_split_brain_choice_cbk (void *data) xlator_t *this = THIS; afr_spb_choice_timeout_cancel (this, inode); + inode_invalidate (inode); inode_unref (inode); return; } @@ -749,6 +750,7 @@ afr_set_split_brain_choice (int ret, call_frame_t *frame, void *opaque) gf_boolean_t timer_set = _gf_false; gf_boolean_t timer_cancelled = _gf_false; gf_boolean_t timer_reset = _gf_false; + gf_boolean_t need_invalidate = _gf_true; int old_spb_choice = -1; frame = data->frame; @@ -861,6 +863,7 @@ set_timer: timer_set = _gf_true; if (timer_reset && !ctx->timer) timer_cancelled = _gf_true; + need_invalidate = _gf_false; } unlock: UNLOCK(&inode->lock); @@ -873,7 +876,8 @@ unlock: * reads from an older cached value despite a change in spb_choice to * a new value. */ - inode_invalidate (inode); + if (need_invalidate) + inode_invalidate (inode); out: if (data) GF_FREE (data); |