From d8bc2834d056a23f55bd86a5fd704bd81e35836d Mon Sep 17 00:00:00 2001 From: Vikas Gorur Date: Mon, 13 Apr 2009 07:23:59 -0700 Subject: Send statbuf from the same subvolume, even across revalidates. Signed-off-by: Anand V. Avati --- xlators/cluster/afr/src/afr.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'xlators/cluster') diff --git a/xlators/cluster/afr/src/afr.c b/xlators/cluster/afr/src/afr.c index 8c3bdc06a..215a80b21 100644 --- a/xlators/cluster/afr/src/afr.c +++ b/xlators/cluster/afr/src/afr.c @@ -628,6 +628,8 @@ afr_lookup (call_frame_t *frame, xlator_t *this, int ret = -1; int i = 0; + uint64_t ctx; + int32_t op_errno = 0; priv = this->private; @@ -640,12 +642,19 @@ afr_lookup (call_frame_t *frame, xlator_t *this, loc_copy (&local->loc, loc); - LOCK (&priv->read_child_lock); - { - local->read_child_index = (++priv->read_child_rr) - % (priv->child_count); + ret = inode_ctx_get (loc->inode, this, &ctx); + if (ret == 0) { + /* lookup is a revalidate */ + + local->read_child_index = afr_read_child (this, loc->inode); + } else { + LOCK (&priv->read_child_lock); + { + local->read_child_index = (++priv->read_child_rr) + % (priv->child_count); + } + UNLOCK (&priv->read_child_lock); } - UNLOCK (&priv->read_child_lock); local->call_count = priv->child_count; -- cgit