vfat: simplify checks in vfat_lookup()
Subsystems (2)
Al Viro
maintainerRFC PATCH 1/1 vfat: simplify checks in vfat_lookup()
vfat_d_anon_disconn() is called only if alias->d_parent is equal to dentry->d_parent *and* it returns false unless alias->d_parent == alias. But in that case alias is the directory we are doing lookup in, and d_splice_alias() would've done the right thing.
Signed-off-by Al Viro <[email protected]>
fs/fat/namei_vfat.c +1 -12
@@ -697,15 +697,6 @@ static int vfat_find(struct inode *dir, const struct qstr *qname,return fat_search_long (dir, qname->name, len, sinfo); } -/* -* (nfsd's) anonymous disconnected dentry? -* NOTE: !IS_ROOT() is not anonymous (I.e. d_splice_alias() did the job). -*/ -static int vfat_d_anon_disconn (struct dentry *dentry) -{ -return IS_ROOT (dentry) && (dentry->d_flags &DCACHE_DISCONNECTED ); -} -static struct dentry *vfat_lookup (struct inode *dir,struct dentry *dentry,unsigned int flags) {
@@ -738,8 +729,7 @@ static struct dentry *vfat_lookup(struct inode *dir, struct dentry *dentry,* Checking "alias->d_parent == dentry->d_parent" to make sure * FS is not corrupted (especially double linked dir). */ -if (alias && alias->d_parent == dentry->d_parent && - !vfat_d_anon_disconn (alias)) { +if (alias && alias->d_parent == dentry->d_parent) {/* * This inode has non anonymous-DCACHE_DISCONNECTED * dentry. This means, the user did ->lookup() by an
@@ -747,7 +737,6 @@ static struct dentry *vfat_lookup(struct inode *dir, struct dentry *dentry,* * Switch to new one for reason of locality if possible. */ -BUG_ON (d_unhashed (alias));if (!S_ISDIR (inode->i_mode))d_move (alias, dentry);iput (inode);