diff options
| author | shishir gowda <shishirng@gluster.com> | 2010-07-15 03:24:15 +0000 | 
|---|---|---|
| committer | Anand V. Avati <avati@dev.gluster.com> | 2010-07-15 03:19:01 -0700 | 
| commit | 539a217dba16fcf3399a1ff29efe73e07fe5a0d7 (patch) | |
| tree | b37e5a20aff915b48d0926dfa76324158c912de9 /xlators/protocol | |
| parent | 432bcc798907c0e9870c1d600b14571d02fca3c2 (diff) | |
return ENOENT instead of EINVAL in client-protocol
To fix ls command from returning a EINVAL error for a symlink and links
over a striped distributed volume. Changing client_stat, client_lookup,
client_link, client_setattr to return a ENOENT when the remote inode
cannot be found on the striped non FIRST childs.
Committer: shishir <shishirng@gluster.com>
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
BUG: 1006 ([3.0.5rc3 stripe] ls on link files gives EINVAL)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1006
Diffstat (limited to 'xlators/protocol')
| -rw-r--r-- | xlators/protocol/client/src/client-protocol.c | 13 | 
1 files changed, 10 insertions, 3 deletions
diff --git a/xlators/protocol/client/src/client-protocol.c b/xlators/protocol/client/src/client-protocol.c index d3ddc01f5d1..485eaa122c8 100644 --- a/xlators/protocol/client/src/client-protocol.c +++ b/xlators/protocol/client/src/client-protocol.c @@ -833,6 +833,7 @@ client_stat (call_frame_t *frame, xlator_t *this, loc_t *loc)          size_t             pathlen = 0;          ino_t              ino = 0;          ino_t              gen = 0; +        int32_t            op_errno = EINVAL;          pathlen = STRLEN_0 (loc->path); @@ -842,6 +843,7 @@ client_stat (call_frame_t *frame, xlator_t *this, loc_t *loc)                          "STAT %"PRId64" (%s): "                          "failed to get remote inode number",                          loc->inode->ino, loc->path); +                op_errno = ENOENT;                  goto unwind;          } @@ -864,7 +866,7 @@ client_stat (call_frame_t *frame, xlator_t *this, loc_t *loc)  unwind:          if (hdr)                  free (hdr); -        STACK_UNWIND (frame, -1, EINVAL, NULL); +        STACK_UNWIND (frame, -1, op_errno, NULL);          return 0;  } @@ -1362,6 +1364,7 @@ client_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc)          ino_t              newpar = 0;          uint64_t           newgen = 0;          client_local_t    *local = NULL; +        int32_t            op_errno = EINVAL;          local = calloc (1, sizeof (*local));          GF_VALIDATE_OR_GOTO (this->name, local, unwind); @@ -1381,6 +1384,7 @@ client_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc)                          "failed to get remote inode number for source inode",                          newloc->parent->ino, newloc->name, newloc->path,                          oldloc->ino, oldloc->path); +                op_errno = ENOENT;                  goto unwind;          } @@ -1417,7 +1421,7 @@ client_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc)  unwind:          if (hdr)                  free (hdr); -        STACK_UNWIND (frame, -1, EINVAL, oldloc->inode, NULL); +        STACK_UNWIND (frame, -1, op_errno, oldloc->inode, NULL);          return 0;  } @@ -3347,6 +3351,7 @@ client_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc,                                  "LOOKUP %"PRId64"/%s (%s): failed to get "                                  "remote inode number for parent",                                  loc->parent->ino, loc->name, loc->path); +                        op_errno = ENOENT;                          goto unwind;                  }                  GF_VALIDATE_OR_GOTO (this->name, loc->name, unwind); @@ -3561,6 +3566,7 @@ client_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,          ino_t                 ino = 0;          uint64_t              gen = 0;          int                   ret = -1; +        int32_t               op_errno = EINVAL;          GF_VALIDATE_OR_GOTO ("client", this, unwind);          GF_VALIDATE_OR_GOTO (this->name, frame, unwind); @@ -3573,6 +3579,7 @@ client_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,                          "SETATTR %"PRId64" (%s): "                          "failed to get remote inode number",                          loc->inode->ino, loc->path); +                op_errno = ENOENT;                  goto unwind;          } @@ -3596,7 +3603,7 @@ client_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,          return ret;  unwind: -        STACK_UNWIND (frame, -1, EINVAL, NULL); +        STACK_UNWIND (frame, -1, op_errno, NULL);          return 0;  }  | 
