Commit cd4e91d3bca8d5527289f5984cf32e9fe6fb8293
Committed by
Linus Torvalds
1 parent
839d9f93c9
Exists in
master
and in
4 other branches
[PATCH] namei fixes (7/19)
The first argument of __do_follow_link() switched to struct path * (__do_follow_link(path->dentry, ...) -> __do_follow_link(path, ...)). All callers have the same calls of mntget() right before and dput()/mntput() right after __do_follow_link(); these calls have been moved inside. Obviously equivalent transformations. Signed-off-by: Al Viro <viro@parcelfarce.linux.theplanet.co.uk> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Showing 1 changed file with 8 additions and 9 deletions Side-by-side Diff
fs/namei.c
... | ... | @@ -498,12 +498,15 @@ |
498 | 498 | struct dentry *dentry; |
499 | 499 | }; |
500 | 500 | |
501 | -static inline int __do_follow_link(struct dentry *dentry, struct nameidata *nd) | |
501 | +static inline int __do_follow_link(struct path *path, struct nameidata *nd) | |
502 | 502 | { |
503 | 503 | int error; |
504 | + struct dentry *dentry = path->dentry; | |
504 | 505 | |
505 | 506 | touch_atime(nd->mnt, dentry); |
506 | 507 | nd_set_link(nd, NULL); |
508 | + | |
509 | + mntget(path->mnt); | |
507 | 510 | error = dentry->d_inode->i_op->follow_link(dentry, nd); |
508 | 511 | if (!error) { |
509 | 512 | char *s = nd_get_link(nd); |
... | ... | @@ -512,6 +515,8 @@ |
512 | 515 | if (dentry->d_inode->i_op->put_link) |
513 | 516 | dentry->d_inode->i_op->put_link(dentry, nd); |
514 | 517 | } |
518 | + dput(dentry); | |
519 | + mntput(path->mnt); | |
515 | 520 | |
516 | 521 | return error; |
517 | 522 | } |
... | ... | @@ -538,10 +543,7 @@ |
538 | 543 | current->link_count++; |
539 | 544 | current->total_link_count++; |
540 | 545 | nd->depth++; |
541 | - mntget(path->mnt); | |
542 | - err = __do_follow_link(path->dentry, nd); | |
543 | - dput(path->dentry); | |
544 | - mntput(path->mnt); | |
546 | + err = __do_follow_link(path, nd); | |
545 | 547 | current->link_count--; |
546 | 548 | nd->depth--; |
547 | 549 | return err; |
... | ... | @@ -1523,10 +1525,7 @@ |
1523 | 1525 | error = security_inode_follow_link(path.dentry, nd); |
1524 | 1526 | if (error) |
1525 | 1527 | goto exit_dput; |
1526 | - mntget(path.mnt); | |
1527 | - error = __do_follow_link(path.dentry, nd); | |
1528 | - dput(path.dentry); | |
1529 | - mntput(path.mnt); | |
1528 | + error = __do_follow_link(&path, nd); | |
1530 | 1529 | path.mnt = nd->mnt; |
1531 | 1530 | if (error) |
1532 | 1531 | return error; |