When resize2fs moves blocks belonging to an inode, it will call
ext2fs_extent_set_bmap() for logical blocks 0, 1, 2, 3, ...
Optimize for this calling pattern so we don't end up creating a
separate extent for each block.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
orig_height = info.max_depth - info.curr_level;
orig_lblk = extent.e_lblk;
+again:
/* go to the logical spot we want to (re/un)map */
retval = ext2fs_extent_goto(handle, logical);
if (retval) {
if (retval)
goto done;
if (physical) {
- /* insert new extent ahead of current */
- retval = ext2fs_extent_insert(handle,
- 0, &newextent);
- if (retval)
- goto done;
+ /*
+ * We've removed the old block, now rely on
+ * the optimized hueristics for adding a new
+ * mapping with appropriate merging if necessary.
+ */
+ goto again;
} else {
retval = ext2fs_extent_fix_parents(handle);
if (retval)