From 0d7fd69b01cf9aebb4f1517f064e89ff65b9ccf8 Mon Sep 17 00:00:00 2001 From: Pranith Kumar K Date: Thu, 30 Oct 2014 10:56:17 +0530 Subject: inode: Handle '/' in basename in inode_link/unlink Problem: inode_link is sometimes called with a trailing '/'. Lookup, dentry operations like link/unlink/mkdir/rmdir/rename etc come without trailing '/' so the stale dentry with '/' remains in the dentry list of the inode. Fix: Add assert checks and return NULL for '/' in bname. Fix ancestry building code to call without '/' at the end. Change-Id: I9c71292a3ac27754538a4e75e53290e182968fad BUG: 1158751 Signed-off-by: Pranith Kumar K Reviewed-on: http://review.gluster.org/9004 Reviewed-by: Niels de Vos Tested-by: Gluster Build System Reviewed-by: Vijay Bellur --- xlators/storage/posix/src/posix-handle.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'xlators/storage/posix/src') diff --git a/xlators/storage/posix/src/posix-handle.c b/xlators/storage/posix/src/posix-handle.c index 9439b295cb9..ab202d79dc9 100644 --- a/xlators/storage/posix/src/posix-handle.c +++ b/xlators/storage/posix/src/posix-handle.c @@ -162,7 +162,6 @@ posix_make_ancestryfromgfid (xlator_t *this, char *path, int pathsize, pgfidstr = strtok_r (linkname + SLEN("../../00/00/"), "/", &saveptr); dir_name = strtok_r (NULL, "/", &saveptr); - strcat (dir_name, "/"); uuid_parse (pgfidstr, tmp_gfid); @@ -178,6 +177,7 @@ posix_make_ancestryfromgfid (xlator_t *this, char *path, int pathsize, inode = posix_resolve (this, itable, *parent, dir_name, &iabuf); + strcat (dir_name, "/"); ret = posix_make_ancestral_node (priv_base_path, path, pathsize, head, dir_name, &iabuf, inode, type, xdata); if (*parent != NULL) { -- cgit