Allow htree directories to be extent mapped. Index: e2fsprogs/e2fsck/pass1.c =================================================================== --- e2fsprogs.orig/e2fsck/pass1.c 2006-07-10 03:45:19.000000000 -0600 +++ e2fsprogs/e2fsck/pass1.c 2006-07-10 03:47:55.000000000 -0600 @@ -1364,10 +1364,23 @@ clear_extattr: return 0; } +static int htree_blk_iter_cb(ext2_filsys fs EXT2FS_ATTR((unused)), + blk_t *blocknr, + e2_blkcnt_t blockcnt EXT2FS_ATTR((unused)), + blk_t ref_blk EXT2FS_ATTR((unused)), + int ref_offset EXT2FS_ATTR((unused)), + void *priv_data) +{ + blk_t *blk = priv_data; + + *blk = *blocknr; + + return BLOCK_ABORT; +} + /* Returns 1 if bad htree, 0 if OK */ static int handle_htree(e2fsck_t ctx, struct problem_context *pctx, - ext2_ino_t ino EXT2FS_ATTR((unused)), - struct ext2_inode *inode, + ext2_ino_t ino, struct ext2_inode *inode, char *block_buf) { struct ext2_dx_root_info *root; @@ -1381,7 +1394,8 @@ static int handle_htree(e2fsck_t ctx, st fix_problem(ctx, PR_1_HTREE_SET, pctx))) return 1; - blk = inode->i_block[0]; + ext2fs_block_iterate2(fs, ino, BLOCK_FLAG_DATA_ONLY | BLOCK_FLAG_HOLE, + block_buf, htree_blk_iter_cb, &blk); if (((blk == 0) || (blk < fs->super->s_first_data_block) || (blk >= fs->super->s_blocks_count)) && Cheers, Andreas -- Andreas Dilger Principal Software Engineer Cluster File Systems, Inc.