diff --git a/src/page/mapper.rs b/src/page/mapper.rs index 27e2b936e7..b97d21543f 100644 --- a/src/page/mapper.rs +++ b/src/page/mapper.rs @@ -63,14 +63,16 @@ impl PageMapper { pub unsafe fn remap_with_full( &mut self, virt: VirtualAddress, - f: impl FnOnce(PhysicalAddress, PageFlags) -> (PhysicalAddress, PageFlags), + f: impl FnOnce(PhysicalAddress, PageFlags) -> Option<(PhysicalAddress, PageFlags)>, ) -> Option<(PageFlags, PhysicalAddress, PageFlush)> { unsafe { self.visit(virt, |p1, i| { let old_entry = p1.entry(i)?; let old_phys = old_entry.address().ok()?; let old_flags = old_entry.flags(); - let (new_phys, new_flags) = f(old_phys, old_flags); + let Some((new_phys, new_flags)) = f(old_phys, old_flags) else { + return None; + }; // TODO: Higher-level PageEntry::new interface? let new_entry = PageEntry::new(new_phys.data(), new_flags.data()); p1.set_entry(i, new_entry); @@ -86,7 +88,7 @@ impl PageMapper { ) -> Option<(PageFlags, PhysicalAddress, PageFlush)> { unsafe { self.remap_with_full(virt, |same_phys, old_flags| { - (same_phys, map_flags(old_flags)) + Some((same_phys, map_flags(old_flags))) }) } }