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 | |
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')
-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; } |