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.
-
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to