|
@@ -581,15 +581,13 @@ static __always_inline int link_path_walk(const char *name, struct nameidata *nd
|
|
|
int result;
|
|
|
|
|
|
/* make sure the stuff we saved doesn't go away */
|
|
|
- dget(save.dentry);
|
|
|
- mntget(save.mnt);
|
|
|
+ path_get(&save);
|
|
|
|
|
|
result = __link_path_walk(name, nd);
|
|
|
if (result == -ESTALE) {
|
|
|
/* nd->path had been dropped */
|
|
|
nd->path = save;
|
|
|
- dget(nd->path.dentry);
|
|
|
- mntget(nd->path.mnt);
|
|
|
+ path_get(&nd->path);
|
|
|
nd->flags |= LOOKUP_REVAL;
|
|
|
result = __link_path_walk(name, nd);
|
|
|
}
|
|
@@ -1216,8 +1214,9 @@ int vfs_path_lookup(struct dentry *dentry, struct vfsmount *mnt,
|
|
|
nd->flags = flags;
|
|
|
nd->depth = 0;
|
|
|
|
|
|
- nd->path.mnt = mntget(mnt);
|
|
|
- nd->path.dentry = dget(dentry);
|
|
|
+ nd->path.dentry = dentry;
|
|
|
+ nd->path.mnt = mnt;
|
|
|
+ path_get(&nd->path);
|
|
|
|
|
|
retval = path_walk(name, nd);
|
|
|
if (unlikely(!retval && !audit_dummy_context() && nd->path.dentry &&
|