diff options
Diffstat (limited to 'fs/ext3/namei.c')
-rw-r--r-- | fs/ext3/namei.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/fs/ext3/namei.c b/fs/ext3/namei.c index 906731a20f1a..4df39c4315e1 100644 --- a/fs/ext3/namei.c +++ b/fs/ext3/namei.c | |||
@@ -552,6 +552,15 @@ static int htree_dirblock_to_tree(struct file *dir_file, | |||
552 | dir->i_sb->s_blocksize - | 552 | dir->i_sb->s_blocksize - |
553 | EXT3_DIR_REC_LEN(0)); | 553 | EXT3_DIR_REC_LEN(0)); |
554 | for (; de < top; de = ext3_next_entry(de)) { | 554 | for (; de < top; de = ext3_next_entry(de)) { |
555 | if (!ext3_check_dir_entry("htree_dirblock_to_tree", dir, de, bh, | ||
556 | (block<<EXT3_BLOCK_SIZE_BITS(dir->i_sb)) | ||
557 | +((char *)de - bh->b_data))) { | ||
558 | /* On error, skip the f_pos to the next block. */ | ||
559 | dir_file->f_pos = (dir_file->f_pos | | ||
560 | (dir->i_sb->s_blocksize - 1)) + 1; | ||
561 | brelse (bh); | ||
562 | return count; | ||
563 | } | ||
555 | ext3fs_dirhash(de->name, de->name_len, hinfo); | 564 | ext3fs_dirhash(de->name, de->name_len, hinfo); |
556 | if ((hinfo->hash < start_hash) || | 565 | if ((hinfo->hash < start_hash) || |
557 | ((hinfo->hash == start_hash) && | 566 | ((hinfo->hash == start_hash) && |
@@ -593,7 +602,7 @@ int ext3_htree_fill_tree(struct file *dir_file, __u32 start_hash, | |||
593 | 602 | ||
594 | dxtrace(printk("In htree_fill_tree, start hash: %x:%x\n", start_hash, | 603 | dxtrace(printk("In htree_fill_tree, start hash: %x:%x\n", start_hash, |
595 | start_minor_hash)); | 604 | start_minor_hash)); |
596 | dir = dir_file->f_dentry->d_inode; | 605 | dir = dir_file->f_path.dentry->d_inode; |
597 | if (!(EXT3_I(dir)->i_flags & EXT3_INDEX_FL)) { | 606 | if (!(EXT3_I(dir)->i_flags & EXT3_INDEX_FL)) { |
598 | hinfo.hash_version = EXT3_SB(dir->i_sb)->s_def_hash_version; | 607 | hinfo.hash_version = EXT3_SB(dir->i_sb)->s_def_hash_version; |
599 | hinfo.seed = EXT3_SB(dir->i_sb)->s_hash_seed; | 608 | hinfo.seed = EXT3_SB(dir->i_sb)->s_hash_seed; |
@@ -604,7 +613,7 @@ int ext3_htree_fill_tree(struct file *dir_file, __u32 start_hash, | |||
604 | } | 613 | } |
605 | hinfo.hash = start_hash; | 614 | hinfo.hash = start_hash; |
606 | hinfo.minor_hash = 0; | 615 | hinfo.minor_hash = 0; |
607 | frame = dx_probe(NULL, dir_file->f_dentry->d_inode, &hinfo, frames, &err); | 616 | frame = dx_probe(NULL, dir_file->f_path.dentry->d_inode, &hinfo, frames, &err); |
608 | if (!frame) | 617 | if (!frame) |
609 | return err; | 618 | return err; |
610 | 619 | ||