提交 bab77ebf 编写于 作者: A Al Viro

switch follow_up() to struct path

Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
上级 e64c390c
......@@ -212,7 +212,7 @@ static int find_autofs_mount(const char *pathname,
err = 0;
}
}
if (!follow_up(&path.mnt, &path.dentry))
if (!follow_up(&path))
break;
}
path_put(&path);
......
......@@ -675,23 +675,23 @@ static inline int do_follow_link(struct path *path, struct nameidata *nd)
return err;
}
int follow_up(struct vfsmount **mnt, struct dentry **dentry)
int follow_up(struct path *path)
{
struct vfsmount *parent;
struct dentry *mountpoint;
spin_lock(&vfsmount_lock);
parent=(*mnt)->mnt_parent;
if (parent == *mnt) {
parent = path->mnt->mnt_parent;
if (parent == path->mnt) {
spin_unlock(&vfsmount_lock);
return 0;
}
mntget(parent);
mountpoint=dget((*mnt)->mnt_mountpoint);
mountpoint = dget(path->mnt->mnt_mountpoint);
spin_unlock(&vfsmount_lock);
dput(*dentry);
*dentry = mountpoint;
mntput(*mnt);
*mnt = parent;
dput(path->dentry);
path->dentry = mountpoint;
mntput(path->mnt);
path->mnt = parent;
return 1;
}
......
......@@ -173,7 +173,7 @@ nfsd_lookup_dentry(struct svc_rqst *rqstp, struct svc_fh *fhp,
.dentry = dget(dparent)};
while (path.dentry == path.mnt->mnt_root &&
follow_up(&path.mnt, &path.dentry))
follow_up(&path))
;
dp = dget_parent(path.dentry);
dput(path.dentry);
......
......@@ -79,7 +79,7 @@ extern struct dentry *lookup_one_len(const char *, struct dentry *, int);
extern struct dentry *lookup_one_noperm(const char *, struct dentry *);
extern int follow_down(struct vfsmount **, struct dentry **);
extern int follow_up(struct vfsmount **, struct dentry **);
extern int follow_up(struct path *);
extern struct dentry *lock_rename(struct dentry *, struct dentry *);
extern void unlock_rename(struct dentry *, struct dentry *);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册