diff options
Diffstat (limited to 'libglusterfsclient/src/libglusterfsclient-dentry.c')
-rw-r--r-- | libglusterfsclient/src/libglusterfsclient-dentry.c | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/libglusterfsclient/src/libglusterfsclient-dentry.c b/libglusterfsclient/src/libglusterfsclient-dentry.c index f2e1e17ff02..8500827faf7 100644 --- a/libglusterfsclient/src/libglusterfsclient-dentry.c +++ b/libglusterfsclient/src/libglusterfsclient-dentry.c @@ -322,7 +322,8 @@ out: /* resolves loc->path to loc->parent and loc->inode */ int32_t libgf_client_path_lookup (loc_t *loc, - libglusterfs_client_ctx_t *ctx) + libglusterfs_client_ctx_t *ctx, + char lookup_basename) { char *pathname = NULL; char *directory = NULL; @@ -345,19 +346,30 @@ libgf_client_path_lookup (loc_t *loc, } libgf_client_loc_wipe (&new_loc); - inode = inode_from_path (ctx->itable, loc->path); pathname = strdup (loc->path); directory = dirname (pathname); parent = inode_from_path (ctx->itable, directory); - - if (inode && parent) { - gf_log ("libglusterfsclient", - GF_LOG_DEBUG, - "resolved path(%s) to %"PRId64"/%"PRId64"(%s)", - loc->path, parent->ino, inode->ino, loc->name); - loc->inode = inode; + + if (parent != NULL) { loc->parent = parent; - goto out; + + if (!lookup_basename) { + gf_log ("libglusterfsclient", + GF_LOG_DEBUG, + "resolved dirname(%s) to %"PRId64, + loc->path, parent->ino); + goto out; + } else { + inode = inode_from_path (ctx->itable, loc->path); + if (inode != NULL) { + gf_log ("libglusterfsclient", + GF_LOG_DEBUG, + "resolved path(%s) to %"PRId64"/%"PRId64, + loc->path, parent->ino, inode->ino); + loc->inode = inode; + goto out; + } + } } else { gf_log ("libglusterfsclient", GF_LOG_DEBUG, |