diff options
| author | Vikas Gorur <vikas@gluster.com> | 2009-05-26 05:01:35 +0000 | 
|---|---|---|
| committer | Anand V. Avati <avati@dev.gluster.com> | 2009-05-26 03:43:39 -0700 | 
| commit | c1c18df3936b01ec4ea8b48b936c4087648f4b3b (patch) | |
| tree | 0b995ed5ed5c9a427f44369696512843360d96a7 | |
| parent | 9a2e319114d70d076b2f219a56397e5793dc3bdf (diff) | |
Always do itransform of the inode number from the first up child.
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
| -rw-r--r-- | xlators/cluster/afr/src/afr.c | 25 | 
1 files changed, 17 insertions, 8 deletions
diff --git a/xlators/cluster/afr/src/afr.c b/xlators/cluster/afr/src/afr.c index ab10df8fc3d..81665612272 100644 --- a/xlators/cluster/afr/src/afr.c +++ b/xlators/cluster/afr/src/afr.c @@ -437,8 +437,10 @@ afr_lookup_cbk (call_frame_t *frame, void *cookie,  	afr_local_t *   local = NULL;  	afr_private_t * priv  = NULL;  	struct stat *   lookup_buf = NULL; -	int             call_count = -1; -	int             child_index = -1; +         +	int             call_count      = -1; +	int             child_index     = -1; +        int             first_up_child  = -1;  	uint32_t        open_fd_count = 0;  	int             ret = 0; @@ -500,10 +502,11 @@ afr_lookup_cbk (call_frame_t *frame, void *cookie,  			local->cont.lookup.xattr = dict_ref (xattr);  			*lookup_buf = *buf; -			lookup_buf->st_ino = afr_itransform (buf->st_ino, -							     priv->child_count, -							     child_index); +                        lookup_buf->st_ino = afr_itransform (buf->st_ino, +                                                             priv->child_count, +                                                             child_index); +                          if (priv->read_child >= 0) {                                  afr_set_read_child (this,                                                      local->cont.lookup.inode,  @@ -537,6 +540,15 @@ afr_lookup_cbk (call_frame_t *frame, void *cookie,  				local->need_data_self_heal = 1;  			} +                        first_up_child = afr_first_up_child (priv); + +                        if (child_index == first_up_child) { +                                local->cont.lookup.buf.st_ino =  +                                        afr_itransform (buf->st_ino, +                                                        priv->child_count, +                                                        first_up_child); +                        } +                          if (child_index == local->read_child_index) {                                  /*  @@ -553,9 +565,6 @@ afr_lookup_cbk (call_frame_t *frame, void *cookie,                                  local->cont.lookup.xattr = dict_ref (xattr);                                  *lookup_buf = *buf; -                                lookup_buf->st_ino = afr_itransform (buf->st_ino, -                                                                     priv->child_count, -                                                                     child_index);                                  if (priv->read_child >= 0) {                                          afr_set_read_child (this,  | 
