Messages in this thread | | | Date | Mon, 24 Sep 2012 13:13:17 +0900 | Subject | Re: [PATCH v3 3/5] fat (exportfs): rebuild inode if ilookup() fails | From | Namjae Jeon <> |
| |
2012/9/22, OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>: > Namjae Jeon <linkinjeon@gmail.com> writes: > >> + if (inode == NULL && MSDOS_SB(sb)->options.nfs == FAT_NFS_LIMITED) { >> + struct buffer_head *bh = NULL; >> + struct msdos_dir_entry *de ; >> + loff_t i_pos = (loff_t)ino; >> + int bits = MSDOS_SB(sb)->dir_per_block_bits; >> + loff_t blocknr = i_pos >> bits; >> + bh = sb_bread(sb, blocknr); >> + if (!bh) { >> + fat_msg(sb, KERN_ERR, >> + "unable to read block(%llu) for building NFS inode", >> + (llu)blocknr); >> + return inode; >> + } >> + de = (struct msdos_dir_entry *)bh->b_data; >> + /* If a file is deleted on server and client is not updated >> + * yet, we must not build the inode upon a lookup call. >> + */ >> + if (de[i_pos&((1<<bits)-1)].name[0] == DELETED_FLAG) > > IS_FREE() would be better. Okay~ I will change. > >> + >> + inode = NULL; >> + else >> + inode = fat_build_inode(sb, &de[i_pos&((1<<bits)-1)], >> + i_pos); >> + brelse(bh); >> + } >> >> return inode; >> } > > 1 << bits == sbi->dir_per_block > > It would be better to add helper to decode i_pos to blocknr and offset. > And it should be shared on fat_write_inode and this. Okay, I will change.
Thanks. > -- > OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> >
| |