Unverified Commit 514b6871 authored by NeilBrown's avatar NeilBrown Committed by Christian Brauner
Browse files

VFS/autofs: try_lookup_one_len() does not need any locks



try_lookup_one_len() is identical to lookup_one_unlocked() except that
it doesn't include the call to lookup_slow().  The latter doesn't need
the inode to be locked, so the former cannot either.

So fix the documentation, remove the WARN_ON and fix the only caller to
not take the lock.

Signed-off-by: default avatarNeilBrown <neilb@suse.de>
Link: https://lore.kernel.org/r/174190517441.9342.5956460781380903128@noble.neil.brown.name


Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent 61185101
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -442,7 +442,6 @@ static int autofs_dev_ioctl_timeout(struct file *fp,
		sbi->exp_timeout = timeout * HZ;
	} else {
		struct dentry *base = fp->f_path.dentry;
		struct inode *inode = base->d_inode;
		int path_len = param->size - AUTOFS_DEV_IOCTL_SIZE - 1;
		struct dentry *dentry;
		struct autofs_info *ino;
@@ -460,9 +459,7 @@ static int autofs_dev_ioctl_timeout(struct file *fp,
				"the parent autofs mount timeout which could "
				"prevent shutdown\n");

		inode_lock_shared(inode);
		dentry = try_lookup_one_len(param->path, base, path_len);
		inode_unlock_shared(inode);
		if (IS_ERR_OR_NULL(dentry))
			return dentry ? PTR_ERR(dentry) : -ENOENT;
		ino = autofs_dentry_ino(dentry);
+2 −3
Original line number Diff line number Diff line
@@ -2864,15 +2864,14 @@ static int lookup_one_common(struct mnt_idmap *idmap,
 * Note that this routine is purely a helper for filesystem usage and should
 * not be called by generic code.
 *
 * The caller must hold base->i_mutex.
 * No locks need be held - only a counted reference to @base is needed.
 *
 */
struct dentry *try_lookup_one_len(const char *name, struct dentry *base, int len)
{
	struct qstr this;
	int err;

	WARN_ON_ONCE(!inode_is_locked(base->d_inode));

	err = lookup_one_common(&nop_mnt_idmap, name, base, len, &this);
	if (err)
		return ERR_PTR(err);