From: Al Viro Date: Fri, 30 Mar 2012 18:08:28 +0000 (-0400) Subject: untangling do_lookup() - expand the area under ->i_mutex X-Git-Tag: upstream/snapshot3+hdmi~7779^2~9 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=37c17e1f377696c797e75c1e915e838b3e0c6120;p=platform%2Fadaptation%2Frenesas_rcar%2Frenesas_kernel.git untangling do_lookup() - expand the area under ->i_mutex keep holding ->i_mutex over revalidation parts Signed-off-by: Al Viro --- diff --git a/fs/namei.c b/fs/namei.c index 157f3de..48fc0fb 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -1173,6 +1173,7 @@ retry: BUG_ON(nd->inode != dir); mutex_lock(&dir->i_mutex); +l: dentry = d_lookup(parent, name); if (likely(!dentry)) { dentry = d_alloc_and_lookup(parent, name, nd); @@ -1193,11 +1194,11 @@ retry: need_reval = 0; status = 1; } - mutex_unlock(&dir->i_mutex); if (unlikely(dentry->d_flags & DCACHE_OP_REVALIDATE) && need_reval) status = d_revalidate(dentry, nd); if (unlikely(status <= 0)) { if (status < 0) { + mutex_unlock(&dir->i_mutex); dput(dentry); return status; } @@ -1205,9 +1206,10 @@ retry: dput(dentry); dentry = NULL; need_reval = 1; - goto retry; + goto l; } } + mutex_unlock(&dir->i_mutex); goto done; } if (unlikely(dentry->d_flags & DCACHE_OP_REVALIDATE) && need_reval)