OSDN Git Service

e2fsck: Don't double count an extent after deleting the last extent
authorTheodore Ts'o <tytso@mit.edu>
Fri, 30 May 2008 19:23:24 +0000 (15:23 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 30 May 2008 19:23:24 +0000 (15:23 -0400)
ext2fs_extent_delete() will leave the extent handle pointing at the
next extent --- except if the last extent in the node.  To deal with
this last case, call ext2fs_get_extent_info() and stop scanning after
processing info->num_entries extents.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
e2fsck/pass1.c

index 5ca2d83..c36683e 100644 (file)
@@ -1622,11 +1622,15 @@ static void scan_extent_node(e2fsck_t ctx, struct problem_context *pctx,
        int                     i;
        int                     is_dir, is_leaf;
        errcode_t               problem;
+       struct ext2_extent_info info;
 
+       pctx->errcode = ext2fs_extent_get_info(ehandle, &info);
+       if (pctx->errcode)
+               return;
 
        pctx->errcode = ext2fs_extent_get(ehandle, EXT2_EXTENT_FIRST_SIB,
                                          &extent);
-       while (!pctx->errcode) {
+       while (!pctx->errcode && info.num_entries-- > 0) {
                is_leaf = extent.e_flags & EXT2_EXTENT_FLAGS_LEAF;
                is_dir = LINUX_S_ISDIR(pctx->inode->i_mode);