]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
fat: remove parent_logstart check in fat_get_parent
authorNamjae Jeon <namjae.jeon@samsung.com>
Sat, 3 Nov 2012 00:42:59 +0000 (11:42 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Wed, 7 Nov 2012 04:15:31 +0000 (15:15 +1100)
The root directory inode is added to the directory hash table in
fat_attach when mounted with nfs option.  Since root dentry never expires
until umount, fat_dget never fails to return the root inode for
subdirectories of root inode.i.e., parent_logstart cannot be zero.

Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>
Signed-off-by: Ravishankar N <ravi.n1@samsung.com>
Signed-off-by: Amit Sahrawat <a.sahrawat@samsung.com>
Cc: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Cc: "J. Bruce Fields" <bfields@fieldses.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/fat/nfs.c

index a4e6ac7e5b06f87b375114bd3844af5db0c0c908..671a75d2fc5987112d33213f3d21b4889fd1463a 100644 (file)
@@ -274,36 +274,29 @@ struct dentry *fat_get_parent(struct dentry *child_dir)
                parent_inode = fat_dget(sb, parent_logstart);
                if (parent_inode || sbi->options.nfs != FAT_NFS_NOSTALE_RO)
                        goto out;
-               if (!parent_logstart)
-                       /*logstart of dotdot entry is zero if
-                       * if the directory's parent is root
-                       */
-                       parent_inode = sb->s_root->d_inode;
-               else {
-                       blknr = fat_clus_to_blknr(sbi, parent_logstart);
-                       parent_bh = sb_bread(sb, blknr);
-                       if (!parent_bh) {
-                               fat_msg(sb, KERN_ERR,
-                                       "NFS:unable to read cluster of parent directory");
-                               goto out;
-                       }
-                       de = (struct msdos_dir_entry *) parent_bh->b_data;
-                       clus_to_match = fat_get_start(sbi, &de[0]);
-                       search_clus = fat_get_start(sbi, &de[1]);
-                       if (!search_clus)
-                               search_clus = sbi->root_cluster;
-                       brelse(parent_bh);
-                       do {
-                               parent_inode =  fat_traverse_cluster(sb,
-                                               search_clus, clus_to_match);
-                               if (IS_ERR(parent_inode) || parent_inode)
-                                       break;
-                               search_clus = fat_read_next_clus(sb,
-                                                               search_clus);
-                               if (search_clus < 0)
-                                       break;
-                       } while (search_clus != FAT_ENT_EOF);
+               blknr = fat_clus_to_blknr(sbi, parent_logstart);
+               parent_bh = sb_bread(sb, blknr);
+               if (!parent_bh) {
+                       fat_msg(sb, KERN_ERR,
+                               "NFS:unable to read cluster of parent directory");
+                       goto out;
                }
+               de = (struct msdos_dir_entry *) parent_bh->b_data;
+               clus_to_match = fat_get_start(sbi, &de[0]);
+               search_clus = fat_get_start(sbi, &de[1]);
+               if (!search_clus)
+                       search_clus = sbi->root_cluster;
+               brelse(parent_bh);
+               do {
+                       parent_inode =  fat_traverse_cluster(sb,
+                                       search_clus, clus_to_match);
+                       if (IS_ERR(parent_inode) || parent_inode)
+                               break;
+                       search_clus = fat_read_next_clus(sb,
+                                                       search_clus);
+                       if (search_clus < 0)
+                               break;
+               } while (search_clus != FAT_ENT_EOF);
        }
 out:
        brelse(dotdot_bh);