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

Commit 383d4e8a authored by Al Viro's avatar Al Viro
Browse files

reconnect_one(): use lookup_one_len_unlocked()



... and explain the non-obvious logics in case when lookup yields
a different dentry.

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 1ae1f3f6
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -143,14 +143,18 @@ static struct dentry *reconnect_one(struct vfsmount *mnt,
	if (err)
		goto out_err;
	dprintk("%s: found name: %s\n", __func__, nbuf);
	inode_lock(parent->d_inode);
	tmp = lookup_one_len(nbuf, parent, strlen(nbuf));
	inode_unlock(parent->d_inode);
	tmp = lookup_one_len_unlocked(nbuf, parent, strlen(nbuf));
	if (IS_ERR(tmp)) {
		dprintk("%s: lookup failed: %d\n", __func__, PTR_ERR(tmp));
		goto out_err;
	}
	if (tmp != dentry) {
		/*
		 * Somebody has renamed it since exportfs_get_name();
		 * great, since it could've only been renamed if it
		 * got looked up and thus connected, and it would
		 * remain connected afterwards.  We are done.
		 */
		dput(tmp);
		goto out_reconnected;
	}