From b1dcda4cf770110b30b9af2591bdfef3a4239188 Mon Sep 17 00:00:00 2001
From: bjorn3 <17426603+bjorn3@users.noreply.github.com>
Date: Fri, 7 Mar 2025 22:35:01 +0100
Subject: [PATCH] storage/nvmed: Use DiskWrapper
---
Cargo.lock | 1 -
storage/ahcid/src/ahci/disk_ata.rs | 10 ++--
storage/ahcid/src/ahci/disk_atapi.rs | 4 +-
storage/ahcid/src/scheme.rs | 16 +++---
storage/bcm2835-sdhcid/src/scheme.rs | 16 +++---
storage/bcm2835-sdhcid/src/sd/mod.rs | 10 ++--
storage/driver-block/src/lib.rs | 14 ++---
storage/ided/src/ide.rs | 10 ++--
storage/ided/src/scheme.rs | 16 +++---
storage/nvmed/Cargo.toml | 1 -
storage/nvmed/src/scheme.rs | 80 ++++++++--------------------
storage/virtio-blkd/src/scheme.rs | 8 +--
12 files changed, 74 insertions(+), 112 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index 537432f9cd..7f304690ff 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -854,7 +854,6 @@ dependencies = [
"futures",
"libredox",
"log",
- "partitionlib",
"pcid",
"redox-daemon",
"redox-scheme 0.3.0",
diff --git a/storage/ahcid/src/ahci/disk_ata.rs b/storage/ahcid/src/ahci/disk_ata.rs
index ee3b32a8b6..bb52a4571d 100644
--- a/storage/ahcid/src/ahci/disk_ata.rs
+++ b/storage/ahcid/src/ahci/disk_ata.rs
@@ -154,7 +154,11 @@ impl DiskATA {
}
impl Disk for DiskATA {
- fn size(&mut self) -> u64 {
+ fn block_size(&self) -> u32 {
+ 512
+ }
+
+ fn size(&self) -> u64 {
self.size
}
@@ -177,8 +181,4 @@ impl Disk for DiskATA {
}
}
}
-
- fn block_length(&mut self) -> u32 {
- 512
- }
}
diff --git a/storage/ahcid/src/ahci/disk_atapi.rs b/storage/ahcid/src/ahci/disk_atapi.rs
index ce3ce0b962..b92112c36e 100644
--- a/storage/ahcid/src/ahci/disk_atapi.rs
+++ b/storage/ahcid/src/ahci/disk_atapi.rs
@@ -69,11 +69,11 @@ impl DiskATAPI {
}
impl Disk for DiskATAPI {
- fn block_length(&mut self) -> u32 {
+ fn block_size(&self) -> u32 {
self.blk_size
}
- fn size(&mut self) -> u64 {
+ fn size(&self) -> u64 {
u64::from(self.blk_count) * u64::from(self.blk_size)
}
diff --git a/storage/ahcid/src/scheme.rs b/storage/ahcid/src/scheme.rs
index 437f70bd2c..63d432e9a8 100644
--- a/storage/ahcid/src/scheme.rs
+++ b/storage/ahcid/src/scheme.rs
@@ -175,7 +175,7 @@ impl SchemeBlock for DiskScheme {
let disk = self.disks.get_mut(number).ok_or(Error::new(EBADF))?;
stat.st_mode = MODE_FILE;
stat.st_size = disk.size();
- stat.st_blksize = disk.block_length();
+ stat.st_blksize = disk.block_size();
Ok(Some(0))
}
Handle::Partition(disk_id, part_num) => {
@@ -190,8 +190,8 @@ impl SchemeBlock for DiskScheme {
};
stat.st_mode = MODE_FILE; // TODO: Block device?
- stat.st_size = size * u64::from(disk.block_length());
- stat.st_blksize = disk.block_length();
+ stat.st_size = size * u64::from(disk.block_size());
+ stat.st_blksize = disk.block_size();
stat.st_blocks = size;
Ok(Some(0))
}
@@ -263,12 +263,12 @@ impl SchemeBlock for DiskScheme {
}
Handle::Disk(number) => {
let disk = self.disks.get_mut(number).ok_or(Error::new(EBADF))?;
- let blk_len = disk.block_length();
+ let blk_len = disk.block_size();
disk.read(offset / u64::from(blk_len), buf)
}
Handle::Partition(disk_num, part_num) => {
let disk = self.disks.get_mut(disk_num).ok_or(Error::new(EBADF))?;
- let blksize = disk.block_length();
+ let blksize = disk.block_size();
// validate that we're actually reading within the bounds of the partition
let rel_block = offset / u64::from(blksize);
@@ -304,12 +304,12 @@ impl SchemeBlock for DiskScheme {
Handle::List(_) => Err(Error::new(EBADF)),
Handle::Disk(number) => {
let disk = self.disks.get_mut(number).ok_or(Error::new(EBADF))?;
- let blk_len = disk.block_length();
+ let blk_len = disk.block_size();
disk.write(offset / u64::from(blk_len), buf)
}
Handle::Partition(disk_num, part_num) => {
let disk = self.disks.get_mut(disk_num).ok_or(Error::new(EBADF))?;
- let blksize = disk.block_length();
+ let blksize = disk.block_size();
// validate that we're actually reading within the bounds of the partition
let rel_block = offset / u64::from(blksize);
@@ -351,7 +351,7 @@ impl SchemeBlock for DiskScheme {
.get(part_num as usize)
.ok_or(Error::new(EBADF))?
.size;
- u64::from(disk.block_length()) * block_count
+ u64::from(disk.block_size()) * block_count
}
},
))
diff --git a/storage/bcm2835-sdhcid/src/scheme.rs b/storage/bcm2835-sdhcid/src/scheme.rs
index 66f469a943..ebe0612346 100644
--- a/storage/bcm2835-sdhcid/src/scheme.rs
+++ b/storage/bcm2835-sdhcid/src/scheme.rs
@@ -164,7 +164,7 @@ impl SchemeBlock for DiskScheme {
let disk = self.disks.get_mut(number).ok_or(Error::new(EBADF))?;
stat.st_mode = MODE_FILE;
stat.st_size = disk.size();
- stat.st_blksize = disk.block_length();
+ stat.st_blksize = disk.block_size();
Ok(Some(0))
}
Handle::Partition(disk_id, part_num) => {
@@ -179,8 +179,8 @@ impl SchemeBlock for DiskScheme {
};
stat.st_mode = MODE_FILE; // TODO: Block device?
- stat.st_size = size * u64::from(disk.block_length());
- stat.st_blksize = disk.block_length();
+ stat.st_size = size * u64::from(disk.block_size());
+ stat.st_blksize = disk.block_size();
stat.st_blocks = size;
Ok(Some(0))
}
@@ -251,12 +251,12 @@ impl SchemeBlock for DiskScheme {
}
Handle::Disk(number) => {
let disk = self.disks.get_mut(number).ok_or(Error::new(EBADF))?;
- let blk_len = disk.block_length();
+ let blk_len = disk.block_size();
disk.read(offset / u64::from(blk_len), buf)
}
Handle::Partition(disk_num, part_num) => {
let disk = self.disks.get_mut(disk_num).ok_or(Error::new(EBADF))?;
- let blksize = disk.block_length();
+ let blksize = disk.block_size();
// validate that we're actually reading within the bounds of the partition
let rel_block = offset / u64::from(blksize);
@@ -285,12 +285,12 @@ impl SchemeBlock for DiskScheme {
Handle::List(_) => Err(Error::new(EBADF)),
Handle::Disk(number) => {
let disk = self.disks.get_mut(number).ok_or(Error::new(EBADF))?;
- let blk_len = disk.block_length();
+ let blk_len = disk.block_size();
disk.write(offset / u64::from(blk_len), buf)
}
Handle::Partition(disk_num, part_num) => {
let disk = self.disks.get_mut(disk_num).ok_or(Error::new(EBADF))?;
- let blksize = disk.block_length();
+ let blksize = disk.block_size();
// validate that we're actually reading within the bounds of the partition
let rel_block = offset / u64::from(blksize as u64);
@@ -331,7 +331,7 @@ impl SchemeBlock for DiskScheme {
.get(part_num as usize)
.ok_or(Error::new(EBADF))?
.size;
- Ok(Some(u64::from(disk.block_length()) * block_count))
+ Ok(Some(u64::from(disk.block_size()) * block_count))
}
}
}
diff --git a/storage/bcm2835-sdhcid/src/sd/mod.rs b/storage/bcm2835-sdhcid/src/sd/mod.rs
index deb3839f81..f8e9ab351b 100644
--- a/storage/bcm2835-sdhcid/src/sd/mod.rs
+++ b/storage/bcm2835-sdhcid/src/sd/mod.rs
@@ -733,7 +733,11 @@ impl SdHostCtrl {
}
impl Disk for SdHostCtrl {
- fn size(&mut self) -> u64 {
+ fn block_size(&self) -> u32 {
+ 512
+ }
+
+ fn size(&self) -> u64 {
//assert 512MiB
self.size
}
@@ -773,8 +777,4 @@ impl Disk for SdHostCtrl {
Err(err) => Err(err),
}
}
-
- fn block_length(&mut self) -> u32 {
- 512
- }
}
diff --git a/storage/driver-block/src/lib.rs b/storage/driver-block/src/lib.rs
index 12d0926204..1eb165d185 100644
--- a/storage/driver-block/src/lib.rs
+++ b/storage/driver-block/src/lib.rs
@@ -53,19 +53,19 @@ fn block_read(
}
pub trait Disk {
- fn block_length(&mut self) -> u32;
- fn size(&mut self) -> u64;
+ fn block_size(&self) -> u32;
+ fn size(&self) -> u64;
fn read(&mut self, block: u64, buffer: &mut [u8]) -> syscall::Result