Messages in this thread | | | Date | Tue, 23 Oct 2012 16:34:39 +0900 | Subject | Re: [PATCH v4 3/4] fat (exportfs): rebuild directory-inode if fat_dget() fails | From | Namjae Jeon <> |
| |
2012/10/13, OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>: > Namjae Jeon <linkinjeon@gmail.com> writes: > >> + if (!fat_get_dotdot_entry(child_dir->d_inode, &dotdot_bh, &de)) { >> + parent_logstart = fat_get_start(sbi, de); >> 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; > > get_parent() should not be called for root dir, right? > >> + 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); >> + } > Hi. OGAWA. I have a question. > Please make this part as own function at least. Okay, I will make own function. >And this is doing same > thing with readdir, so we will have to clean this up as I said before. When I checked, I didn't understand about same thing readdir and this function yet. Because even though minor conditions match but functionality wise both are different.
Thanks. > -- > OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> >
| |