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

Commit 213b067c authored by Eric W. Biederman's avatar Eric W. Biederman
Browse files

nsfs: Simplify __ns_get_path



Move mntget from the very beginning of __ns_get_path to
the success path of __ns_get_path, and remove the mntget
calls.

This removes the possibility that there will be a mntget/mntput
pair of __ns_get_path has to retry, and generally simplifies the code.

Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
parent 78725596
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ static void nsfs_evict(struct inode *inode)

static void *__ns_get_path(struct path *path, struct ns_common *ns)
{
	struct vfsmount *mnt = mntget(nsfs_mnt);
	struct vfsmount *mnt = nsfs_mnt;
	struct qstr qname = { .name = "", };
	struct dentry *dentry;
	struct inode *inode;
@@ -67,7 +67,7 @@ static void *__ns_get_path(struct path *path, struct ns_common *ns)
	rcu_read_unlock();
	ns->ops->put(ns);
got_it:
	path->mnt = mnt;
	path->mnt = mntget(mnt);
	path->dentry = dentry;
	return NULL;
slow:
@@ -75,7 +75,6 @@ static void *__ns_get_path(struct path *path, struct ns_common *ns)
	inode = new_inode_pseudo(mnt->mnt_sb);
	if (!inode) {
		ns->ops->put(ns);
		mntput(mnt);
		return ERR_PTR(-ENOMEM);
	}
	inode->i_ino = ns->inum;
@@ -88,7 +87,6 @@ static void *__ns_get_path(struct path *path, struct ns_common *ns)
	dentry = d_alloc_pseudo(mnt->mnt_sb, &qname);
	if (!dentry) {
		iput(inode);
		mntput(mnt);
		return ERR_PTR(-ENOMEM);
	}
	d_instantiate(dentry, inode);
@@ -97,7 +95,6 @@ static void *__ns_get_path(struct path *path, struct ns_common *ns)
	if (d) {
		d_delete(dentry);	/* make sure ->d_prune() does nothing */
		dput(dentry);
		mntput(mnt);
		cpu_relax();
		return ERR_PTR(-EAGAIN);
	}