From df868214c077065cfeafcfdadb6bbf5151d20b3d Mon Sep 17 00:00:00 2001 From: Shehjar Tikoo Date: Thu, 23 Jul 2009 16:19:26 +0000 Subject: 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 BUG: 161 (unfs3 crashes on link system call by fileop) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=161 --- libglusterfsclient/src/libglusterfsclient.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'libglusterfsclient') diff --git a/libglusterfsclient/src/libglusterfsclient.c b/libglusterfsclient/src/libglusterfsclient.c index ec41710f8be..a670ffa5102 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) { -- cgit