diff --git a/core/storage/btree.rs b/core/storage/btree.rs index 08bab4d60..d77e9426c 100644 --- a/core/storage/btree.rs +++ b/core/storage/btree.rs @@ -5617,6 +5617,7 @@ pub struct IntegrityCheckState { pub current_page: usize, page_stack: Vec, first_leaf_level: Option, + page: Option, } impl IntegrityCheckState { @@ -5629,6 +5630,7 @@ impl IntegrityCheckState { max_intkey: i64::MAX, }], first_leaf_level: None, + page: None, } } } @@ -5664,11 +5666,17 @@ pub fn integrity_check( else { return Ok(IOResult::Done(())); }; - let (page, _c) = btree_read_page(pager, page_idx)?; - return_if_locked_maybe_load!(pager, page); + let page = match state.page.take() { + Some(page) => page, + None => { + let (page, _c) = btree_read_page(pager, page_idx)?; + state.page = Some(page.get()); + return Ok(IOResult::IO); + } + }; + return_if_locked!(page); state.page_stack.pop(); - let page = page.get(); let contents = page.get_contents(); let usable_space = pager.usable_space() as u16; let mut coverage_checker = CoverageChecker::new(page.get().id);