summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorIan Kent <raven@themaw.net>2011-01-18 12:06:10 +0800
committerAl Viro <viro@zeniv.linux.org.uk>2011-01-18 01:21:26 -0500
commit8931221411f9ff950de8fd686dc5ab881394cb9a (patch)
tree63d97668bae62d1034002cc7778adde2aa18b346 /fs
parentc14cc63a63e94d490ac6517a555113c30d420db4 (diff)
downloadlinux-stable-8931221411f9ff950de8fd686dc5ab881394cb9a.tar.gz
linux-stable-8931221411f9ff950de8fd686dc5ab881394cb9a.tar.bz2
linux-stable-8931221411f9ff950de8fd686dc5ab881394cb9a.zip
vfs - fix dentry ref count in do_lookup()
There is a ref count problem in fs/namei.c:do_lookup(). When walking in ref-walk mode, if follow_managed() returns a fail we need to drop dentry and possibly vfsmount. Clean up properly, as we do in the other caller of follow_managed(). Signed-off-by: Ian Kent <raven@themaw.net> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs')
-rw-r--r--fs/namei.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/namei.c b/fs/namei.c
index b753192d8c3f..7d77f24d32a9 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1272,8 +1272,10 @@ done:
path->mnt = mnt;
path->dentry = dentry;
err = follow_managed(path, nd->flags);
- if (unlikely(err < 0))
+ if (unlikely(err < 0)) {
+ path_put_conditional(path, nd);
return err;
+ }
*inode = path->dentry->d_inode;
return 0;