diff options
author | Soumya Koduri <skoduri@redhat.com> | 2016-05-10 13:03:42 +0530 |
---|---|---|
committer | Kaleb KEITHLEY <kkeithle@redhat.com> | 2016-05-11 07:36:18 -0700 |
commit | 9a7f210e0954ea8a6bcc224f515094bdf4b7762c (patch) | |
tree | 179347db31c25e0819655692b6d264b62f14c1b8 /api/src/glfs-resolve.c | |
parent | b798f82c2e8d786797e34865d464b92fb4e9b641 (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.
This is backport of below mainline fix -
http://review.gluster.org/14278
Change-Id: I674f747c73369d0597a9c463e6ea4c85b9091355
BUG: 1335017
Signed-off-by: Soumya Koduri <skoduri@redhat.com>
Reviewed-on: http://review.gluster.org/14278
Reviewed-by: Niels de Vos <ndevos@redhat.com>
Reviewed-by: jiffin tony Thottan <jthottan@redhat.com>
Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
Reviewed-on: http://review.gluster.org/14288
Smoke: Gluster Build System <jenkins@build.gluster.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.com>
Diffstat (limited to 'api/src/glfs-resolve.c')
-rw-r--r-- | api/src/glfs-resolve.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/api/src/glfs-resolve.c b/api/src/glfs-resolve.c index 9d8ea2c4553..7a7064c3aa2 100644 --- a/api/src/glfs-resolve.c +++ b/api/src/glfs-resolve.c @@ -129,6 +129,11 @@ glfs_refresh_inode_safe (xlator_t *subvol, inode_t *oldinode, if (newinode == loc.inode) inode_ctx_set (newinode, THIS, &ctx_value); inode_lookup (newinode); + } else { + gf_msg (subvol->name, GF_LOG_WARNING, errno, + API_MSG_INODE_LINK_FAILED, + "inode linking of %s failed", + uuid_utoa ((unsigned char *)&iatt.ia_gfid)); } loc_wipe (&loc); @@ -341,7 +346,14 @@ glfs_resolve_component (struct glfs *fs, xlator_t *subvol, inode_t *parent, goto out; inode = inode_link (loc.inode, loc.parent, component, &ciatt); - if (inode == loc.inode) + + if (!inode) { + gf_msg (subvol->name, GF_LOG_WARNING, errno, + API_MSG_INODE_LINK_FAILED, + "inode linking of %s failed", + uuid_utoa ((unsigned char *)&ciatt.ia_gfid)); + goto out; + } else if (inode == loc.inode) inode_ctx_set (inode, THIS, &ctx_value); found: if (inode) |