Namjae Jeon <namjae.jeon@xxxxxxxxxxx> writes: Hi, Sorry for long delay. > +static int fat_get_block_bmap(struct inode *inode, sector_t iblock, > + struct buffer_head *bh_result, int create) > +{ > + struct super_block *sb = inode->i_sb; > + unsigned long max_blocks = bh_result->b_size >> inode->i_blkbits; > + int err; > + sector_t bmap, last_block; > + unsigned long mapped_blocks; > + > + BUG_ON(create != 0); > + > + last_block = inode->i_blocks >> (sb->s_blocksize_bits - 9); > + > + if (iblock >= last_block) > + return 0; > + > + err = fat_get_mapped_cluster(inode, iblock, last_block, &mapped_blocks, > + &bmap); > + if (err) > + return err; Probably, we are missing rootdir check here? If it is fat12/fat16, rootdir has to treat as special, because it doesn't have cluster chain. So, how about to pass flags to fat_bmap()? For example, /* Check EOF for excluding bmap() ioctl path */ static int is_exceed_eof() { ... } fat_bmap(..., from_bmap) { ... if (!from_bmap && is_exceed_eof(inode, sector, create)) return 0; ... } or such. Thanks. -- OGAWA Hirofumi <hirofumi@xxxxxxxxxxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html