From 9c40d14841f04811097a123d6e8555e78ce56811 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Mon, 11 Jun 2012 00:25:45 -0400 Subject: [PATCH] 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 Signed-off-by: "Theodore Ts'o" --- e2fsck/pass1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c index c6aae6ec..72dcd971 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) > -- 2.11.0