* 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,
        /* 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,
        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 */