diff options
author | Darrick J. Wong <darrick.wong@oracle.com> | 2014-02-06 15:30:59 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2014-02-06 15:31:03 -0500 |
commit | 3c890ee96ebc3f4ca05668e272531b46118d4cc4 (patch) | |
tree | 83359b83769c15d67549dfdbd37aaa49e82cdf53 | |
parent | 80dec4cb31957cde8850fa720532a32760bf3075 (diff) | |
download | e2fsprogs-3c890ee96ebc3f4ca05668e272531b46118d4cc4.tar.gz |
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 <darrick.wong@oracle.com>
Reviewed-by: Zheng Liu <wenqing.lz@taobao.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-rw-r--r-- | lib/ext2fs/punch.c | 8 |
1 files changed, 8 insertions, 0 deletions
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; |