Whamcloud - gitweb
libext2fs: during punch, fix parent extents after modifying extent
authorDarrick J. Wong <darrick.wong@oracle.com>
Thu, 6 Feb 2014 20:30:59 +0000 (15:30 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 6 Feb 2014 20:31:03 +0000 (15:31 -0500)
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>
lib/ext2fs/punch.c

index 657cb53..a3d020e 100644 (file)
@@ -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;