diff options
| author | Pranith Kumar K <pranithk@gluster.com> | 2012-05-18 22:00:03 +0530 | 
|---|---|---|
| committer | Vijay Bellur <vijay@gluster.com> | 2012-05-21 09:42:00 -0700 | 
| commit | 16f9cf846e028d8d24138c6b34bf149b4e4ed2bf (patch) | |
| tree | 440ee008c3ec1f9acecfadb950b05e347acb4f39 | |
| parent | 4accf5836251cbf348cac193ba108ea67c6888b3 (diff) | |
cluster/afr: Assign gfid path if path is NULL in lookup
Change-Id: I45be4ea7f04ee79b67a83134fe8ebd18067a707f
BUG: 820355
Signed-off-by: Pranith Kumar K <pranithk@gluster.com>
Reviewed-on: http://review.gluster.com/3373
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Reviewed-by: Raghavendra Bhat <raghavendrabhat@gluster.com>
Reviewed-by: Vijay Bellur <vijay@gluster.com>
| -rw-r--r-- | xlators/cluster/afr/src/afr-common.c | 23 | 
1 files changed, 14 insertions, 9 deletions
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c index 1d1ac0881..ed366ce43 100644 --- a/xlators/cluster/afr/src/afr-common.c +++ b/xlators/cluster/afr/src/afr-common.c @@ -2114,20 +2114,25 @@ afr_lookup (call_frame_t *frame, xlator_t *this,          frame->local = local;          local->fop = GF_FOP_LOOKUP; -        if (loc->path && !strcmp (loc->path, "/" GF_REPLICATE_TRASH_DIR)) { -                op_errno = ENOENT; +        loc_copy (&local->loc, loc); +        ret = loc_path (&local->loc, NULL); +        if (ret < 0) { +                op_errno = EINVAL;                  goto out;          } -        loc_copy (&local->loc, loc); +        if (!strcmp (local->loc.path, "/" GF_REPLICATE_TRASH_DIR)) { +                op_errno = ENOENT; +                goto out; +        } -        ret = inode_ctx_get (loc->inode, this, &ctx); +        ret = inode_ctx_get (local->loc.inode, this, &ctx);          if (ret == 0) {                  /* lookup is a revalidate */                  local->read_child_index = afr_inode_get_read_ctx (this, -                                                                  loc->inode, -                                                                  NULL); +                                                               local->loc.inode, +                                                               NULL);          } else {                  LOCK (&priv->read_child_lock);                  { @@ -2165,14 +2170,14 @@ afr_lookup (call_frame_t *frame, xlator_t *this,          local->call_count = afr_up_children_count (local->child_up,                                                     priv->child_count); -        ret = afr_lookup_xattr_req_prepare (local, this, xattr_req, loc, +        ret = afr_lookup_xattr_req_prepare (local, this, xattr_req, &local->loc,                                              &gfid_req);          if (ret) {                  local->op_errno = -ret;                  goto out;          }          afr_lookup_save_gfid (local->cont.lookup.gfid_req, gfid_req, -                              loc); +                              &local->loc);          local->fop = GF_FOP_LOOKUP;          for (i = 0; i < priv->child_count; i++) {                  if (local->child_up[i]) { @@ -2180,7 +2185,7 @@ afr_lookup (call_frame_t *frame, xlator_t *this,                                             (void *) (long) i,                                             priv->children[i],                                             priv->children[i]->fops->lookup, -                                           loc, local->xattr_req); +                                           &local->loc, local->xattr_req);                          if (!--call_count)                                  break;                  }  | 
