From caaeb044603f2f4859b29a93cb16730d85afcb3d Mon Sep 17 00:00:00 2001 From: Sonny Rao Date: Fri, 27 Apr 2018 15:37:55 -0700 Subject: devices: block: add sector info to block errors This would have been useful in figuring out recent bugs in the block sub system. BUG=chromium:837453 TEST=manual test on kevin with qcow device Change-Id: I3e3360bb0226e3cd7052e0431ce555cfef5e091b Reviewed-on: https://chromium-review.googlesource.com/1034013 Commit-Ready: Sonny Rao Tested-by: Sonny Rao Reviewed-by: Zach Reizner --- devices/src/virtio/block.rs | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) (limited to 'devices/src/virtio/block.rs') diff --git a/devices/src/virtio/block.rs b/devices/src/virtio/block.rs index 2faa45d..d322388 100644 --- a/devices/src/virtio/block.rs +++ b/devices/src/virtio/block.rs @@ -82,9 +82,22 @@ fn sector(mem: &GuestMemory, desc_addr: GuestAddress) -> result::Result u8 { match self { &ExecuteError::Flush(_) => VIRTIO_BLK_S_IOERR, - &ExecuteError::Read(_, _, _) => VIRTIO_BLK_S_IOERR, - &ExecuteError::Seek(_) => VIRTIO_BLK_S_IOERR, - &ExecuteError::Write(_, _, _) => VIRTIO_BLK_S_IOERR, + &ExecuteError::Read{ .. } => VIRTIO_BLK_S_IOERR, + &ExecuteError::Seek{ .. } => VIRTIO_BLK_S_IOERR, + &ExecuteError::Write{ .. } => VIRTIO_BLK_S_IOERR, &ExecuteError::Unsupported(_) => VIRTIO_BLK_S_UNSUPP, } } @@ -157,16 +170,22 @@ impl Request { mem: &GuestMemory) -> result::Result { disk.seek(SeekFrom::Start(self.sector << SECTOR_SHIFT)) - .map_err(ExecuteError::Seek)?; + .map_err(|e| ExecuteError::Seek{ ioerr: e, sector: self.sector })?; match self.request_type { RequestType::In => { mem.read_to_memory(self.data_addr, disk, self.data_len as usize) - .map_err(|e| ExecuteError::Read(self.data_addr, self.data_len, e))?; + .map_err(|e| ExecuteError::Read{ addr: self.data_addr, + length: self.data_len, + sector: self.sector, + guestmemerr: e })?; return Ok(self.data_len); } RequestType::Out => { mem.write_from_memory(self.data_addr, disk, self.data_len as usize) - .map_err(|e| ExecuteError::Write(self.data_addr, self.data_len, e))?; + .map_err(|e| ExecuteError::Write{ addr: self.data_addr, + length: self.data_len, + sector: self.sector, + guestmemerr: e })?; } RequestType::Flush => disk.flush().map_err(ExecuteError::Flush)?, RequestType::Unsupported(t) => return Err(ExecuteError::Unsupported(t)), -- cgit 1.4.1