From eb1874a4bbb185e4cd812402663c09beee0d52ec Mon Sep 17 00:00:00 2001 From: Al Viro Date: Mon, 6 Jun 2005 13:35:59 -0700 Subject: [PATCH] --- yaml --- r: 1841 b: refs/heads/master c: 5f92b3bcec0fa2e2d775b589850097f9dc6b2de2 h: refs/heads/master i: 1839: 4655176f3af5f8a4a5db49d384940a86605912d4 v: v3 --- [refs] | 2 +- trunk/fs/namei.c | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 2cc369d0a7c4..1cfa2847156a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 90ebe5654febe3555a2516d51d3d251226d35fdb +refs/heads/master: 5f92b3bcec0fa2e2d775b589850097f9dc6b2de2 diff --git a/trunk/fs/namei.c b/trunk/fs/namei.c index abeec34e7553..12d75ed214f6 100644 --- a/trunk/fs/namei.c +++ b/trunk/fs/namei.c @@ -526,6 +526,7 @@ static inline int __do_follow_link(struct dentry *dentry, struct nameidata *nd) static inline int do_follow_link(struct path *path, struct nameidata *nd) { int err = -ELOOP; + mntget(path->mnt); if (current->link_count >= MAX_NESTED_LINKS) goto loop; if (current->total_link_count >= 40) @@ -541,9 +542,13 @@ static inline int do_follow_link(struct path *path, struct nameidata *nd) err = __do_follow_link(path->dentry, nd); current->link_count--; nd->depth--; + dput(path->dentry); + mntput(path->mnt); return err; loop: path_release(nd); + dput(path->dentry); + mntput(path->mnt); return err; } @@ -783,10 +788,7 @@ static fastcall int __link_path_walk(const char * name, struct nameidata *nd) goto out_dput; if (inode->i_op->follow_link) { - mntget(next.mnt); err = do_follow_link(&next, nd); - dput(next.dentry); - mntput(next.mnt); if (err) goto return_err; err = -ENOENT; @@ -837,10 +839,7 @@ static fastcall int __link_path_walk(const char * name, struct nameidata *nd) inode = next.dentry->d_inode; if ((lookup_flags & LOOKUP_FOLLOW) && inode && inode->i_op && inode->i_op->follow_link) { - mntget(next.mnt); err = do_follow_link(&next, nd); - dput(next.dentry); - mntput(next.mnt); if (err) goto return_err; inode = nd->dentry->d_inode;