Whamcloud - gitweb
libext2fs: Fix regression in ext2fs_extent_set_bmap()
authorTheodore Ts'o <tytso@mit.edu>
Mon, 20 Jul 2009 02:43:33 +0000 (22:43 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 20 Jul 2009 02:43:33 +0000 (22:43 -0400)
Commit 0dc291611 introduced a regression when unmapping the first
block in an extent.  This caused e2fsck -fD to corrupt large
directories if the directory has to shrink by more than one block.
The problem was set_bmap should only go to a next leaf when setting a
first block in an extent, and not when it is unmapping the first block
in an extent.

Addresses-Debian-Bug: #537510

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
lib/ext2fs/extent.c

index 7fcc2cf..9d7b7de 100644 (file)
@@ -1296,11 +1296,12 @@ errcode_t ext2fs_extent_set_bmap(ext2_extent_handle_t handle,
                        }
                        if (retval)
                                goto done;
+                       retval = ext2fs_extent_get(handle,
+                                                  EXT2_EXTENT_NEXT_LEAF,
+                                                  &extent);
+                       if (retval)
+                               goto done;
                }
-               retval = ext2fs_extent_get(handle, EXT2_EXTENT_NEXT_LEAF,
-                                          &extent);
-               if (retval)
-                       goto done;
                extent.e_pblk++;
                extent.e_lblk++;
                extent.e_len--;