diff --git a/src/scheme/user.rs b/src/scheme/user.rs
index 0c96651313a2654257a9c88124cd2c1b1aa209a4..789938763f4845f83e8c2c49b83188897a51a339 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.");