Re: [PATCH 1/2] e2fsck: Let end_blk to be the maximum value of u32.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux