diff --git a/src/context/memory.rs b/src/context/memory.rs index e7d5a0baa78816ec8b5234651d779f66d27cf976..ffc61415d82210736b5f5e4e78a2fd79459cb353 100644 --- a/src/context/memory.rs +++ b/src/context/memory.rs @@ -777,11 +777,18 @@ impl Grant { }; let frame = Frame::containing_address(phys); - let is_cow = !matches!(self.info.provider, Provider::External { .. }); + let is_cow_opt = match self.info.provider { + Provider::Allocated => Some(true), + Provider::External { .. } => Some(false), + Provider::PhysBorrowed { .. } => None, + Provider::Fmap { .. } => todo!(), + }; - get_page_info(frame) - .expect("allocated frame did not have an associated PageInfo") - .remove_ref(is_cow); + if let Some(is_cow) = is_cow_opt { + get_page_info(frame) + .expect("allocated frame did not have an associated PageInfo") + .remove_ref(is_cow); + } flusher.consume(flush);