diff options
author | Shehjar Tikoo <shehjart@gluster.com> | 2009-07-23 16:19:26 +0000 |
---|---|---|
committer | Anand V. Avati <avati@dev.gluster.com> | 2009-07-23 15:20:16 -0700 |
commit | bea6b86ef6defba89274ef85667c56cb52c17d7b (patch) | |
tree | 73348fbe60a7d4d1036613c5881effbdfa5cb908 | |
parent | c2733b13aaa6d38eb165e770a936f8bfc19bc685 (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
-rwxr-xr-x | libglusterfsclient/src/libglusterfsclient.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/libglusterfsclient/src/libglusterfsclient.c b/libglusterfsclient/src/libglusterfsclient.c index abdc756a42f..705373f70a3 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) { |