summaryrefslogtreecommitdiffstats
path: root/libglusterfs/src/inode.c
diff options
context:
space:
mode:
authorSoumya Koduri <skoduri@redhat.com>2016-05-10 13:03:42 +0530
committerNiels de Vos <ndevos@redhat.com>2016-05-10 09:10:25 -0700
commit176724cdec7061ead0bd7497bb56d0ac09a668a7 (patch)
tree1460d38b26070137b2cfcb289434aaa21769de0e /libglusterfs/src/inode.c
parentf3699f32fd8d468f757697fdacf4949b8d5312d5 (diff)
libglusterfs/gfapi: set appropriate errno for inode_link failures
We do not seem to be setting errno appropriately in case of inode_link failures. This errno may be used by any application (for eg., nfs-ganesha) to determine the error encountered. This patch addresses the same. Change-Id: I674f747c73369d0597a9c463e6ea4c85b9091355 BUG: 1334621 Signed-off-by: Soumya Koduri <skoduri@redhat.com> Reviewed-on: http://review.gluster.org/14278 Smoke: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Niels de Vos <ndevos@redhat.com> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> Reviewed-by: jiffin tony Thottan <jthottan@redhat.com> Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com> CentOS-regression: Gluster Build System <jenkins@build.gluster.com>
Diffstat (limited to 'libglusterfs/src/inode.c')
-rw-r--r--libglusterfs/src/inode.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/libglusterfs/src/inode.c b/libglusterfs/src/inode.c
index 7f2a102c855..ab4b505e22f 100644
--- a/libglusterfs/src/inode.c
+++ b/libglusterfs/src/inode.c
@@ -929,27 +929,34 @@ __inode_link (inode_t *inode, inode_t *parent, const char *name,
inode_table_t *table = NULL;
inode_t *link_inode = NULL;
- if (!inode)
+ if (!inode) {
+ errno = EINVAL;
return NULL;
+ }
table = inode->table;
- if (!table)
+ if (!table) {
+ errno = EINVAL;
return NULL;
+ }
if (parent) {
/* We should prevent inode linking between different
inode tables. This can cause errors which is very
hard to catch/debug. */
if (inode->table != parent->table) {
+ errno = EINVAL;
GF_ASSERT (!"link attempted b/w inodes of diff table");
}
if (parent->ia_type != IA_IFDIR) {
+ errno = EINVAL;
GF_ASSERT (!"link attempted on non-directory parent");
return NULL;
}
if (!name || strlen (name) == 0) {
+ errno = EINVAL;
GF_ASSERT (!"link attempted with no basename on "
"parent");
return NULL;
@@ -959,11 +966,15 @@ __inode_link (inode_t *inode, inode_t *parent, const char *name,
link_inode = inode;
if (!__is_inode_hashed (inode)) {
- if (!iatt)
+ if (!iatt) {
+ errno = EINVAL;
return NULL;
+ }
- if (gf_uuid_is_null (iatt->ia_gfid))
+ if (gf_uuid_is_null (iatt->ia_gfid)) {
+ errno = EINVAL;
return NULL;
+ }
old_inode = __inode_find (table, iatt->ia_gfid);
@@ -1010,9 +1021,11 @@ __inode_link (inode_t *inode, inode_t *parent, const char *name,
"inode %s with parent %s",
uuid_utoa (link_inode->gfid),
uuid_utoa (parent->gfid));
+ errno = ENOMEM;
return NULL;
}
if (old_inode && __is_dentry_cyclic (dentry)) {
+ errno = ELOOP;
__dentry_unset (dentry);
return NULL;
}