[PATCH 2/3] vfs - fix dentry ref count in do_lookup()

Ian Kent
2011-01-18T04:15:25Z

There is a ref count problem in fs/namei.c:do_lookup().

When walking in ref-walk mode, if follow_managed() returns a fail the
reference held by path.dentry isn't dropped.
---

fs/namei.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/fs/namei.c b/fs/namei.c
index b753192..dbc36ff 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1272,8 +1272,11 @@ done:
path->mnt = mnt;
path->dentry = dentry;
err = follow_managed(path, nd->flags);
- if (unlikely(err < 0))
+ if (unlikely(err < 0)) {
+ if (!(nd->flags & LOOKUP_RCU))
+ dput(dentry);
return err;
+ }
*inode = path->dentry->d_inode;
return 0;