From: Al Viro Date: Fri, 30 Mar 2012 18:37:42 +0000 (-0400) Subject: untangling do_lookup() - merge failure exits in !dentry case X-Git-Tag: upstream/snapshot3+hdmi~7779^2~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ec335e91a4f088d8759c1311d0724e609d1c318e;p=platform%2Fadaptation%2Frenesas_rcar%2Frenesas_kernel.git untangling do_lookup() - merge failure exits in !dentry case Signed-off-by: Al Viro --- diff --git a/fs/namei.c b/fs/namei.c index 5414438..a0f9a02 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -1176,35 +1176,28 @@ retry: dentry = d_lookup(parent, name); if (dentry && d_need_lookup(dentry)) { dentry = d_inode_lookup(parent, dentry, nd); - if (IS_ERR(dentry)) { - mutex_unlock(&dir->i_mutex); - return PTR_ERR(dentry); - } - } else if (dentry && (dentry->d_flags & DCACHE_OP_REVALIDATE)) { + goto l; + } + if (dentry && (dentry->d_flags & DCACHE_OP_REVALIDATE)) { status = d_revalidate(dentry, nd); if (unlikely(status <= 0)) { if (status < 0) { - mutex_unlock(&dir->i_mutex); dput(dentry); - return status; + dentry = ERR_PTR(status); + goto l; } if (!d_invalidate(dentry)) { dput(dentry); dentry = d_alloc_and_lookup(parent, name, nd); - if (IS_ERR(dentry)) { - mutex_unlock(&dir->i_mutex); - return PTR_ERR(dentry); - } } } } else if (!dentry) { dentry = d_alloc_and_lookup(parent, name, nd); - if (IS_ERR(dentry)) { - mutex_unlock(&dir->i_mutex); - return PTR_ERR(dentry); - } } + l: mutex_unlock(&dir->i_mutex); + if (IS_ERR(dentry)) + return PTR_ERR(dentry); goto done; } if (unlikely(dentry->d_flags & DCACHE_OP_REVALIDATE) && need_reval)