Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bab77ebf authored by Al Viro's avatar Al Viro
Browse files

switch follow_up() to struct path



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent e64c390c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);
+8 −8
Original line number Diff line number Diff line
@@ -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;
}

+1 −1
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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 *);