From: Theodore Ts'o Date: Mon, 20 Jul 2009 02:43:33 +0000 (-0400) Subject: libext2fs: Fix regression in ext2fs_extent_set_bmap() X-Git-Tag: v1.41.9~32 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=16e470e65010ba3f0516cf9cdf1bd6c98f064e3f;p=thirdparty%2Fe2fsprogs.git libext2fs: Fix regression in ext2fs_extent_set_bmap() 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" --- diff --git a/lib/ext2fs/extent.c b/lib/ext2fs/extent.c index 7fcc2cf9c..9d7b7de7d 100644 --- a/lib/ext2fs/extent.c +++ b/lib/ext2fs/extent.c @@ -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--;