From 3c890ee96ebc3f4ca05668e272531b46118d4cc4 Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Thu, 6 Feb 2014 15:30:59 -0500 Subject: [PATCH] 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 --- lib/ext2fs/punch.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/ext2fs/punch.c b/lib/ext2fs/punch.c index 657cb53d..a3d020ec 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;