Commit cd4e91d3bca8d5527289f5984cf32e9fe6fb8293

Authored by Al Viro
Committed by Linus Torvalds
1 parent 839d9f93c9

[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

... ... @@ -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;