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

vfat_revalidate{,_ci}(): use stable parent inode passed by caller

parent 14d02c3d
Loading
Loading
Loading
Loading
+4 −9
Original line number Diff line number Diff line
@@ -43,14 +43,9 @@ static inline void vfat_d_version_set(struct dentry *dentry,
 * If it happened, the negative dentry isn't actually negative
 * anymore.  So, drop it.
 */
static int vfat_revalidate_shortname(struct dentry *dentry)
static bool vfat_revalidate_shortname(struct dentry *dentry, struct inode *dir)
{
	int ret = 1;
	spin_lock(&dentry->d_lock);
	if (!inode_eq_iversion(d_inode(dentry->d_parent), vfat_d_version(dentry)))
		ret = 0;
	spin_unlock(&dentry->d_lock);
	return ret;
	return inode_eq_iversion(dir, vfat_d_version(dentry));
}

static int vfat_revalidate(struct inode *dir, const struct qstr *name,
@@ -62,7 +57,7 @@ static int vfat_revalidate(struct inode *dir, const struct qstr *name,
	/* This is not negative dentry. Always valid. */
	if (d_really_is_positive(dentry))
		return 1;
	return vfat_revalidate_shortname(dentry);
	return vfat_revalidate_shortname(dentry, dir);
}

static int vfat_revalidate_ci(struct inode *dir, const struct qstr *name,
@@ -99,7 +94,7 @@ static int vfat_revalidate_ci(struct inode *dir, const struct qstr *name,
	if (flags & (LOOKUP_CREATE | LOOKUP_RENAME_TARGET))
		return 0;

	return vfat_revalidate_shortname(dentry);
	return vfat_revalidate_shortname(dentry, dir);
}

/* returns the length of a struct qstr, ignoring trailing dots */