summaryrefslogtreecommitdiffstats
path: root/libglusterfsclient/src/libglusterfsclient.c
diff options
context:
space:
mode:
authorShehjar Tikoo <shehjart@gluster.com>2009-07-23 16:19:26 +0000
committerAnand V. Avati <avati@dev.gluster.com>2009-07-23 15:20:16 -0700
commitbea6b86ef6defba89274ef85667c56cb52c17d7b (patch)
tree73348fbe60a7d4d1036613c5881effbdfa5cb908 /libglusterfsclient/src/libglusterfsclient.c
parentc2733b13aaa6d38eb165e770a936f8bfc19bc685 (diff)
libglusterfsclient: Avoid overwrite of inode found through ino number
In libgf_client_loc_fill, there is a possibility that all the ino, par and name are specified as non-NULL,non-zero args. So if an inode is located in the itable using the ino and the subsequent search for the inode using the par-ino and the file name does not result in an inode being found, the current code over-writes the inode that was found through the ino. The correct behaviour is to stop further searches if inode was already found using ino. Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 161 (unfs3 crashes on link system call by fileop) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=161
Diffstat (limited to 'libglusterfsclient/src/libglusterfsclient.c')
-rwxr-xr-xlibglusterfsclient/src/libglusterfsclient.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/libglusterfsclient/src/libglusterfsclient.c b/libglusterfsclient/src/libglusterfsclient.c
index abdc756..705373f 100755
--- a/libglusterfsclient/src/libglusterfsclient.c
+++ b/libglusterfsclient/src/libglusterfsclient.c
@@ -841,14 +841,19 @@ libgf_client_loc_fill (loc_t *loc,
if (!inode) {
if (ino)
inode = inode_search (ctx->itable, ino, NULL);
+
+ if (inode)
+ goto inode_found;
+
if (par && name)
inode = inode_search (ctx->itable, par, name);
-
- loc->inode = inode;
}
- if (inode)
+inode_found:
+ if (inode) {
loc->ino = inode->ino;
+ loc->inode = inode;
+ }
parent = loc->parent;
if (!parent) {