diff options
| author | vmallika <vmallika@redhat.com> | 2015-08-07 15:51:53 +0530 | 
|---|---|---|
| committer | Raghavendra G <rgowdapp@redhat.com> | 2015-08-13 03:43:51 -0700 | 
| commit | fb4955b796ab2f3236e00686ecc99e792f9c0f8b (patch) | |
| tree | 5a225e960d22c7d228d85ff120c8789545ced72b | |
| parent | 15796b3d3efb998bdb5413ac0ad1af1903cae493 (diff) | |
posix: posix_make_ancestryfromgfid shouldn't log ENOENT
posix_make_ancestryfromgfid shouldn't log ENOENT
and it should set proper op_errno
Change-Id: I8a87f30bc04d33cab06c91c74baa9563a1c7b45d
BUG: 1251449
Signed-off-by: vmallika <vmallika@redhat.com>
Reviewed-on: http://review.gluster.org/11861
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Manikandan Selvaganesh <mselvaga@redhat.com>
Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
| -rw-r--r-- | xlators/storage/posix/src/posix-handle.c | 17 | ||||
| -rw-r--r-- | xlators/storage/posix/src/posix-handle.h | 2 | ||||
| -rw-r--r-- | xlators/storage/posix/src/posix.c | 5 | 
3 files changed, 16 insertions, 8 deletions
diff --git a/xlators/storage/posix/src/posix-handle.c b/xlators/storage/posix/src/posix-handle.c index bc010a9cc65..f67389dcc0f 100644 --- a/xlators/storage/posix/src/posix-handle.c +++ b/xlators/storage/posix/src/posix-handle.c @@ -97,7 +97,7 @@ posix_make_ancestryfromgfid (xlator_t *this, char *path, int pathsize,                               gf_dirent_t *head, int type, uuid_t gfid,                               const size_t handle_size,                               const char *priv_base_path, inode_table_t *itable, -                             inode_t **parent, dict_t *xdata) +                             inode_t **parent, dict_t *xdata, int32_t *op_errno)  {          char        *linkname   = NULL; /* "../../<gfid[0]>/<gfid[1]/"                                           "<gfidstr>/<NAME_MAX>" */ @@ -112,6 +112,7 @@ posix_make_ancestryfromgfid (xlator_t *this, char *path, int pathsize,          uuid_t       tmp_gfid   = {0, };          if (!path || !parent || !priv_base_path || gf_uuid_is_null (gfid)) { +                *op_errno = EINVAL;                  goto out;          } @@ -133,6 +134,8 @@ posix_make_ancestryfromgfid (xlator_t *this, char *path, int pathsize,                  ret = posix_make_ancestral_node (priv_base_path, path, pathsize,                                                   head, "/", &iabuf, inode, type,                                                   xdata); +                if (ret < 0) +                        *op_errno = ENOMEM;                  return ret;          } @@ -144,9 +147,12 @@ posix_make_ancestryfromgfid (xlator_t *this, char *path, int pathsize,          len = readlink (dir_handle, linkname, PATH_MAX);          if (len < 0) { -                gf_msg (this->name, GF_LOG_ERROR, errno, P_MSG_READLINK_FAILED, -                        "could not read the link from the gfid handle %s ", -                        dir_handle); +                gf_msg (this->name, (errno == ENOENT || errno == ESTALE) +                        ? GF_LOG_DEBUG:GF_LOG_ERROR, errno, +                        P_MSG_READLINK_FAILED, "could not read the link from " +                        "the gfid handle %s ", dir_handle); +                ret = -1; +                *op_errno = errno;                  goto out;          } @@ -160,7 +166,7 @@ posix_make_ancestryfromgfid (xlator_t *this, char *path, int pathsize,          ret = posix_make_ancestryfromgfid (this, path, pathsize, head, type,                                             tmp_gfid, handle_size,                                             priv_base_path, itable, parent, -                                           xdata); +                                           xdata, op_errno);          if (ret < 0) {                  goto out;          } @@ -169,6 +175,7 @@ posix_make_ancestryfromgfid (xlator_t *this, char *path, int pathsize,          inode = posix_resolve (this, itable, *parent, dir_name, &iabuf);          if (inode == NULL) { +                *op_errno = ESTALE;                  ret = -1;                  goto out;          } diff --git a/xlators/storage/posix/src/posix-handle.h b/xlators/storage/posix/src/posix-handle.h index c26e301d5af..3dc8b9209f3 100644 --- a/xlators/storage/posix/src/posix-handle.h +++ b/xlators/storage/posix/src/posix-handle.h @@ -255,7 +255,7 @@ posix_make_ancestryfromgfid (xlator_t *this, char *path, int pathsize,                               const size_t handle_size,                               const char *priv_base_path,                               inode_table_t *table, inode_t **parent, -                             dict_t *xdata); +                             dict_t *xdata, int32_t *op_errno);  int  posix_handle_path_safe (xlator_t *this, uuid_t gfid, const char *basename,                          char *buf, size_t len); diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c index 54ff155452b..ffb9f764c99 100644 --- a/xlators/storage/posix/src/posix.c +++ b/xlators/storage/posix/src/posix.c @@ -3503,7 +3503,8 @@ posix_get_ancestry_directory (xlator_t *this, inode_t *leaf_inode,                                             type | POSIX_ANCESTRY_PATH,                                             leaf_inode->gfid,                                             handle_size, priv->base_path, -                                           leaf_inode->table, &inode, xdata); +                                           leaf_inode->table, &inode, xdata, +                                           op_errno);          if (ret < 0)                  goto out; @@ -3759,7 +3760,7 @@ posix_get_ancestry_non_directory (xlator_t *this, inode_t *leaf_inode,                                                        handle_size,                                                        priv->base_path,                                                        leaf_inode->table, -                                                      &parent, xdata); +                                                      &parent, xdata, op_errno);                  if (op_ret < 0) {                          goto next;                  }  | 
