make d_splice_alias(ERR_PTR(err), dentry) = ERR_PTR(err)
[pandora-kernel.git] / fs / fat / namei_msdos.c
index be15437..66e83b8 100644 (file)
@@ -209,29 +209,20 @@ static struct dentry *msdos_lookup(struct inode *dir, struct dentry *dentry,
        int err;
 
        lock_super(sb);
-
        err = msdos_find(dir, dentry->d_name.name, dentry->d_name.len, &sinfo);
-       if (err) {
-               if (err == -ENOENT) {
-                       inode = NULL;
-                       goto out;
-               }
-               goto error;
-       }
-
-       inode = fat_build_inode(sb, sinfo.de, sinfo.i_pos);
-       brelse(sinfo.bh);
-       if (IS_ERR(inode)) {
-               err = PTR_ERR(inode);
-               goto error;
+       switch (err) {
+       case -ENOENT:
+               inode = NULL;
+               break;
+       case 0:
+               inode = fat_build_inode(sb, sinfo.de, sinfo.i_pos);
+               brelse(sinfo.bh);
+               break;
+       default:
+               inode = ERR_PTR(err);
        }
-out:
        unlock_super(sb);
        return d_splice_alias(inode, dentry);
-
-error:
-       unlock_super(sb);
-       return ERR_PTR(err);
 }
 
 /***** Creates a directory entry (name is already formatted). */
@@ -326,8 +317,6 @@ static int msdos_rmdir(struct inode *dir, struct dentry *dentry)
        struct fat_slot_info sinfo;
        int err;
 
-       dentry_unhash(dentry);
-
        lock_super(sb);
        /*
         * Check whether the directory is not in use, then check
@@ -459,9 +448,6 @@ static int do_msdos_rename(struct inode *old_dir, unsigned char *old_name,
        old_inode = old_dentry->d_inode;
        new_inode = new_dentry->d_inode;
 
-       if (new_inode && S_ISDIR(new_inode->i_mode))
-               dentry_unhash(new_dentry);
-
        err = fat_scan(old_dir, old_name, &old_sinfo);
        if (err) {
                err = -EIO;