summaryrefslogtreecommitdiffstats
path: root/libglusterfs/src/xlator.c
diff options
context:
space:
mode:
authorPranith Kumar K <pkarampu@redhat.com>2014-06-13 11:45:53 +0530
committerVijay Bellur <vbellur@redhat.com>2015-03-08 08:24:39 -0700
commita25cdf135f01ebeb64a4497df1bb5146bfdc6620 (patch)
tree2e97626b7b00da7865514de86b1d712e7c372580 /libglusterfs/src/xlator.c
parentadef0c8860f57c8137382d848244009e9a584497 (diff)
Use common loc-touchup in fuse/server/gfapi
Change-Id: Id41fb29480bb6d22c34469339163da05b98c1a98 BUG: 1115907 Signed-off-by: Pranith Kumar K <pkarampu@redhat.com> Reviewed-on: http://review.gluster.org/8226 Reviewed-by: Shyamsundar Ranganathan <srangana@redhat.com> Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Niels de Vos <ndevos@redhat.com> Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'libglusterfs/src/xlator.c')
-rw-r--r--libglusterfs/src/xlator.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/libglusterfs/src/xlator.c b/libglusterfs/src/xlator.c
index 3378a35d54a..23cf89af026 100644
--- a/libglusterfs/src/xlator.c
+++ b/libglusterfs/src/xlator.c
@@ -735,6 +735,39 @@ loc_gfid_utoa (loc_t *loc)
}
int
+loc_touchup (loc_t *loc, const char *name)
+{
+ char *path = NULL;
+ int ret = 0;
+
+ if (loc->path)
+ goto out;
+
+ if (loc->parent && name && strlen (name)) {
+ ret = inode_path (loc->parent, name, &path);
+ if (path) /*Guaranteed to have trailing '/' */
+ loc->name = strrchr (path, '/') + 1;
+
+ if (uuid_is_null (loc->pargfid))
+ uuid_copy (loc->pargfid, loc->parent->gfid);
+ } else if (loc->inode) {
+ ret = inode_path (loc->inode, 0, &path);
+ if (uuid_is_null (loc->gfid))
+ uuid_copy (loc->gfid, loc->inode->gfid);
+ }
+
+ if (ret < 0 || !path) {
+ ret = -ENOMEM;
+ goto out;
+ }
+
+ loc->path = path;
+ ret = 0;
+out:
+ return ret;
+}
+
+int
loc_copy_overload_parent (loc_t *dst, loc_t *src, inode_t *parent)
{
int ret = -1;