@@ -3050,6 +3050,7 @@ report_problem:
goto report_problem;
return;
}
+ int level_bak = ext2fs_current_level_get(ehandle);
/* The next extent should match this index's logical start */
if (extent.e_lblk != lblk) {
struct ext2_extent_info e_info;
@@ -3079,14 +3080,17 @@ report_problem:
next_try_repairs);
if (pctx->errcode)
return;
- pctx->errcode = ext2fs_extent_get(ehandle,
- EXT2_EXTENT_UP, &extent);
- if (pctx->errcode) {
- pctx->str = "EXT2_EXTENT_UP";
- return;
+
+ if (level_bak == ext2fs_current_level_get(ehandle)) {
+ pctx->errcode = ext2fs_extent_get(ehandle,
+ EXT2_EXTENT_UP, &extent);
+ if (pctx->errcode) {
+ pctx->str = "EXT2_EXTENT_UP";
+ return;
+ }
+ mark_block_used(ctx, blk);
+ pb->num_blocks++;
}
- mark_block_used(ctx, blk);
- pb->num_blocks++;
goto next;
}
@@ -1333,6 +1333,7 @@ extern errcode_t ext2fs_extent_open2(ext2_filsys
fs, ext2_ino_t ino,
extern void ext2fs_extent_free(ext2_extent_handle_t handle);
extern errcode_t ext2fs_extent_get(ext2_extent_handle_t handle,
int flags, struct ext2fs_extent *extent);
+extern int ext2fs_current_level_get(ext2_extent_handle_t handle);
extern errcode_t ext2fs_extent_node_split(ext2_extent_handle_t handle);
extern errcode_t ext2fs_extent_replace(ext2_extent_handle_t handle,
int flags,
struct ext2fs_extent *extent);
@@ -575,6 +575,11 @@ retry:
return 0;
}
+int ext2fs_current_level_get(ext2_extent_handle_t handle)
+{
+ return handle->level;
+}
+
static errcode_t update_path(ext2_extent_handle_t handle)
{
blk64_t blk;