diff options
Diffstat (limited to 'fs/namei.c')
-rw-r--r-- | fs/namei.c | 9 |
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) | |||
526 | static inline int do_follow_link(struct path *path, struct nameidata *nd) | 526 | static 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; |
548 | loop: | 548 | loop: |
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 | ||