aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/namei.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/fs/namei.c b/fs/namei.c
index 020fb8c8d1cd..519900d83bcb 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -526,7 +526,6 @@ static inline int __do_follow_link(struct dentry *dentry, struct nameidata *nd)
526static inline int do_follow_link(struct path *path, struct nameidata *nd) 526static inline int do_follow_link(struct path *path, struct nameidata *nd)
527{ 527{
528 int err = -ELOOP; 528 int err = -ELOOP;
529 mntget(path->mnt);
530 if (current->link_count >= MAX_NESTED_LINKS) 529 if (current->link_count >= MAX_NESTED_LINKS)
531 goto loop; 530 goto loop;
532 if (current->total_link_count >= 40) 531 if (current->total_link_count >= 40)
@@ -539,16 +538,16 @@ static inline int do_follow_link(struct path *path, struct nameidata *nd)
539 current->link_count++; 538 current->link_count++;
540 current->total_link_count++; 539 current->total_link_count++;
541 nd->depth++; 540 nd->depth++;
541 mntget(path->mnt);
542 err = __do_follow_link(path->dentry, nd); 542 err = __do_follow_link(path->dentry, nd);
543 current->link_count--;
544 nd->depth--;
545 dput(path->dentry); 543 dput(path->dentry);
546 mntput(path->mnt); 544 mntput(path->mnt);
545 current->link_count--;
546 nd->depth--;
547 return err; 547 return err;
548loop: 548loop:
549 path_release(nd);
550 dput(path->dentry); 549 dput(path->dentry);
551 mntput(path->mnt); 550 path_release(nd);
552 return err; 551 return err;
553} 552}
554 553