From eba596e57a35ef07b8591db203153484178becac Mon Sep 17 00:00:00 2001 From: tappro Date: Wed, 18 May 2005 11:52:27 +0000 Subject: [PATCH] b=6344 r=alex - fix bug with flag DCACHE_CROSS_REF that can be unsetted sometimes. --- lustre/smfs/dir.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/lustre/smfs/dir.c b/lustre/smfs/dir.c index 6be2ddd..d5d4029 100644 --- a/lustre/smfs/dir.c +++ b/lustre/smfs/dir.c @@ -204,26 +204,28 @@ static int smfs_do_lookup (struct inode * dir, if (IS_ERR(rdentry)) { rc = PTR_ERR(rdentry); rdentry = NULL; - } - else { + } else { tmp = rdentry; - //copy fields if DCACHE_CROSS_REF - smfs_update_dentry(dentry, tmp); } - } else + } else { tmp = cache_dentry; - + } + SMFS_POST_HOOK(dir, HOOK_LOOKUP, &msg, rc); - if (tmp && tmp->d_inode) { - *inode = smfs_get_inode(dir->i_sb, tmp->d_inode->i_ino, + if (tmp) { + //copy fields if DCACHE_CROSS_REF + smfs_update_dentry(dentry, tmp); + + if (tmp->d_inode) { + *inode = smfs_get_inode(dir->i_sb, tmp->d_inode->i_ino, dir, 0); - if (!(*inode)) - rc = -ENOENT; + if (!(*inode)) + rc = -ENOENT; + } } if (rdentry) { - LASSERT(atomic_read(&rdentry->d_count) > 0); dput(rdentry); } -- 1.8.3.1