]> www.infradead.org Git - users/willy/pagecache.git/commitdiff
vfat_revalidate{,_ci}(): use stable parent inode passed by caller
authorAl Viro <viro@zeniv.linux.org.uk>
Fri, 3 Jan 2025 06:16:14 +0000 (01:16 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 28 Jan 2025 00:25:24 +0000 (19:25 -0500)
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/fat/namei_vfat.c

index f9cbd5c6f9327739a797082f70b898c7afcc8968..926c26e90ef8418075f033c740b49a34e0c62fe1 100644 (file)
@@ -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 */