summaryrefslogtreecommitdiffstats
path: root/xlators/storage/posix/src
diff options
context:
space:
mode:
authorvmallika <vmallika@redhat.com>2015-08-07 15:51:53 +0530
committerRaghavendra G <rgowdapp@redhat.com>2015-08-16 21:25:45 -0700
commitf54594753ccecf43b1d501a24374cad18e244127 (patch)
tree1864eb111a7ed37bb0ca3d211105595051f124e9 /xlators/storage/posix/src
parent6d3d4dba5276aea924ec275ae00b69c70fa975c0 (diff)
posix: posix_make_ancestryfromgfid shouldn't log ENOENT
This is a backport of http://review.gluster.org/11861 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> Change-Id: Iefe010117e64586ac6b499459286721b0065cea8 BUG: 1253260 Signed-off-by: vmallika <vmallika@redhat.com> Reviewed-on: http://review.gluster.org/11910 Tested-by: Gluster Build System <jenkins@build.gluster.com> Tested-by: NetBSD Build System <jenkins@build.gluster.org> Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
Diffstat (limited to 'xlators/storage/posix/src')
-rw-r--r--xlators/storage/posix/src/posix-handle.c17
-rw-r--r--xlators/storage/posix/src/posix-handle.h2
-rw-r--r--xlators/storage/posix/src/posix.c5
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 281d52fde71..96e7098d153 100644
--- a/xlators/storage/posix/src/posix-handle.c
+++ b/xlators/storage/posix/src/posix-handle.c
@@ -102,7 +102,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>" */
@@ -117,6 +117,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;
}
@@ -138,6 +139,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;
}
@@ -149,9 +152,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;
}
@@ -165,7 +171,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;
}
@@ -174,6 +180,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 356b7b9f309..76ef8547e9e 100644
--- a/xlators/storage/posix/src/posix-handle.h
+++ b/xlators/storage/posix/src/posix-handle.h
@@ -260,7 +260,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 d16794f9ba5..ec13a083d0d 100644
--- a/xlators/storage/posix/src/posix.c
+++ b/xlators/storage/posix/src/posix.c
@@ -3515,7 +3515,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;
@@ -3771,7 +3772,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;
}