From f5f972189b05515eaee9df2aa5afab6165887120 Mon Sep 17 00:00:00 2001 From: Ravishankar N Date: Mon, 30 Jun 2014 21:50:14 +0000 Subject: libgfapi: succeed lookup of "/.." For the root dir, ".." should resolve to itself. i.e. when glfs_h_lookupat (fs, NULL, "/..", &stat) (or) glfs_h_lookupat (fs, root, "..", &stat) is performed, stat must contain root dir's information. Change-Id: I1c92091cdc4ff00e6b17e5fa349009c6dfc441c1 BUG: 1114814 Signed-off-by: Ravishankar N Reviewed-on: http://review.gluster.org/8207 Tested-by: Gluster Build System Reviewed-by: Niels de Vos Reviewed-by: Poornima G Reviewed-by: Prashanth Pai Reviewed-by: Raghavendra Talur --- api/src/glfs-resolve.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/api/src/glfs-resolve.c b/api/src/glfs-resolve.c index 7cd1e47bc8f..fd0ed757ffe 100644 --- a/api/src/glfs-resolve.c +++ b/api/src/glfs-resolve.c @@ -241,11 +241,15 @@ glfs_resolve_component (struct glfs *fs, xlator_t *subvol, inode_t *parent, uuid_copy (loc.pargfid, parent->gfid); - if (strcmp (component, ".") == 0) + if (strcmp (component, ".") == 0) { loc.inode = inode_ref (parent); - else if (strcmp (component, "..") == 0) - loc.inode = inode_parent (parent, 0, 0); - else + } else if (strcmp (component, "..") == 0) { + if (__is_root_gfid (parent->gfid)) + /* ".." on root points to itself */ + loc.inode = inode_ref (parent); + else + loc.inode = inode_parent (parent, 0, 0); + } else loc.inode = inode_grep (parent->table, parent, component); if (loc.inode) { -- cgit