From: Darrick J. Wong Date: Thu, 6 Feb 2014 20:30:59 +0000 (-0500) Subject: libext2fs: during punch, fix parent extents after modifying extent X-Git-Tag: v1.42.10~67 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c890ee96ebc3f4ca05668e272531b46118d4cc4;p=thirdparty%2Fe2fsprogs.git libext2fs: during punch, fix parent extents after modifying extent When modifying/removing an extent during punch, don't forget to update the extent's parents. Signed-off-by: Darrick J. Wong Reviewed-by: Zheng Liu Signed-off-by: Theodore Ts'o --- diff --git a/lib/ext2fs/punch.c b/lib/ext2fs/punch.c index 657cb53d5..a3d020ece 100644 --- a/lib/ext2fs/punch.c +++ b/lib/ext2fs/punch.c @@ -353,6 +353,9 @@ static errcode_t ext2fs_punch_extent(ext2_filsys fs, ext2_ino_t ino, if (extent.e_len) { dbg_print_extent("replacing", &extent); retval = ext2fs_extent_replace(handle, 0, &extent); + if (retval) + goto errout; + retval = ext2fs_extent_fix_parents(handle); } else { struct ext2fs_extent newex; blk64_t old_lblk, next_lblk; @@ -387,6 +390,11 @@ static errcode_t ext2fs_punch_extent(ext2_filsys fs, ext2_ino_t ino, if (retval) goto errout; + retval = ext2fs_extent_fix_parents(handle); + if (retval && retval != EXT2_ET_NO_CURRENT_NODE) + goto errout; + retval = 0; + /* Jump forward to the next extent. */ ext2fs_extent_goto(handle, next_lblk); op = EXT2_EXTENT_CURRENT;