From 3ed83c74cf75a3f0720f35397aedab237d74dff1 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Wed, 7 Sep 2022 12:01:15 -0600 Subject: [PATCH] Workaround for real hardware prp issue --- nvmed/src/nvme/mod.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/nvmed/src/nvme/mod.rs b/nvmed/src/nvme/mod.rs index f21f478545..c76673541e 100644 --- a/nvmed/src/nvme/mod.rs +++ b/nvmed/src/nvme/mod.rs @@ -599,18 +599,20 @@ impl Nvme { (buffer_prp_guard[0], (buffer_prp_guard.physical() + 8) as u64) }; + let mut cmd = NvmeCmd::default(); let comp = self.submit_and_complete_command(1, |cid| { - if write { + cmd = if write { NvmeCmd::io_write(cid, nsid, lba, blocks_1, ptr0, ptr1) } else { NvmeCmd::io_read(cid, nsid, lba, blocks_1, ptr0, ptr1) - } + }; + cmd.clone() }); let status = comp.status >> 1; if status == 0 { Ok(()) } else { - log::error!("command failed with status {:#x}", status); + log::error!("command {:#x?} failed with status {:#x}", cmd, status); Err(Error::new(EIO)) } } @@ -626,7 +628,7 @@ impl Nvme { let buffer_guard = self.buffer.lock().unwrap(); - for chunk in buf.chunks_mut(buffer_guard.len()) { + for chunk in buf.chunks_mut(/*TODO: buffer_guard.len()*/ 8192) { let blocks = (chunk.len() + block_size - 1) / block_size; assert!(blocks > 0); @@ -653,7 +655,7 @@ impl Nvme { let mut buffer_guard = self.buffer.lock().unwrap(); - for chunk in buf.chunks(buffer_guard.len()) { + for chunk in buf.chunks(/*TODO: buffer_guard.len()*/ 8192) { let blocks = (chunk.len() + block_size - 1) / block_size; assert!(blocks > 0);