Hi Tao, Thanks for reporting the problem and submitting a test case. I've kept the regression test case (although I ended up renaming it). However, I think a better fix is to change e2fsck, since it wasn't making a check that it shouldn't have been making in the first place. The commit description describes the fix which I think is better.... - Ted commit 9c40d14841f04811097a123d6e8555e78ce56811 Author: Theodore Ts'o <tytso@xxxxxxx> Date: Mon Jun 11 00:25:45 2012 -0400 e2fsck: only check for zero-length leaf extents The on-disk format for interior nodes in the extent tree does not encode the length of each entry in the interior node; instead, it is synthesized/simulated by the extent library code in libext2fs. Unfortunately, this simulation is not perfect; in particular it does not work for the last extent in the extent tree if there are uninitialized blocks allocated using fallocate with FALLOC_FL_KEEP_SIZE, and it leads to e2fsck incorrectly complaining about an invalid zero-length extent. We only need to worry about the extent length for the leaves of the tree, since it is there were we are checking an on-disk value, as opposed to a software-generated simulation. So restrict the check of extent length to leaf nodes in the extent tree. Reported-by: Tao Ma <tm@xxxxxx> Signed-off-by: "Theodore Ts'o" <tytso@xxxxxxx> diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c index c6aae6e..72dcd97 100644 --- a/e2fsck/pass1.c +++ b/e2fsck/pass1.c @@ -1779,7 +1779,7 @@ static void scan_extent_node(e2fsck_t ctx, struct problem_context *pctx, problem = PR_1_EXTENT_BAD_START_BLK; else if (extent.e_lblk < start_block) problem = PR_1_OUT_OF_ORDER_EXTENTS; - else if (extent.e_len == 0) + else if (is_leaf && extent.e_len == 0) problem = PR_1_EXTENT_LENGTH_ZERO; else if (is_leaf && (extent.e_pblk + extent.e_len) > -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html