From 3a80528d13d0ae91a7289a9828d1a9c453d04337 Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Wed, 5 Jul 2023 14:28:53 +0200 Subject: [PATCH] Fix MAP_LAZY mappings. --- src/scheme/user.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/scheme/user.rs b/src/scheme/user.rs index 0c966513..78993876 100644 --- a/src/scheme/user.rs +++ b/src/scheme/user.rs @@ -364,8 +364,12 @@ impl UserInner { } pub fn request_fmap(&self, id: usize, offset: u64, required_page_count: usize, flags: MapFlags) -> Result<()> { log::info!("REQUEST FMAP"); + + let packet_id = self.next_id(); + self.fmap.lock().insert(packet_id, Arc::downgrade(&context::current()?)); + self.todo.send(Packet { - id: self.next_id(), + id: packet_id, pid: context::context_id().into(), a: KSMSG_MMAP, b: id, @@ -502,8 +506,10 @@ impl UserInner { gid: (map.offset >> 32) as u32, })?; + let mapping_is_lazy = map.flags.contains(MapFlags::MAP_LAZY); + let base_page_opt = match response { - Response::Regular(code) => (!map.flags.contains(MapFlags::MAP_LAZY)) + Response::Regular(code) => (!mapping_is_lazy) .then_some(Error::demux(code)?), Response::Fd(_) => { log::debug!("Scheme incorrectly returned an fd for fmap."); -- GitLab