[pve-devel] [PATCH installer 6/6] tui: setup: handle missing disk block size gracefully
Christoph Heiss
c.heiss at proxmox.com
Wed Aug 9 15:44:25 CEST 2023
As that value can indeed be undefined, handle that (edge-)case
gracefully. There is only one place where it is checked, in the ZFS RAID
setup dialog. Aligns it with how the low-level installer handles that
case too.
Signed-off-by: Christoph Heiss <c.heiss at proxmox.com>
---
proxmox-tui-installer/src/options.rs | 2 +-
proxmox-tui-installer/src/setup.rs | 3 ++-
proxmox-tui-installer/src/views/bootdisk.rs | 16 ++++++++++++----
3 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/proxmox-tui-installer/src/options.rs b/proxmox-tui-installer/src/options.rs
index dab1730..f18c813 100644
--- a/proxmox-tui-installer/src/options.rs
+++ b/proxmox-tui-installer/src/options.rs
@@ -222,7 +222,7 @@ pub struct Disk {
pub path: String,
pub model: Option<String>,
pub size: f64,
- pub block_size: usize,
+ pub block_size: Option<usize>,
}
impl fmt::Display for Disk {
diff --git a/proxmox-tui-installer/src/setup.rs b/proxmox-tui-installer/src/setup.rs
index c071b80..dec91cb 100644
--- a/proxmox-tui-installer/src/setup.rs
+++ b/proxmox-tui-installer/src/setup.rs
@@ -277,7 +277,8 @@ fn deserialize_disks_map<'de, D>(deserializer: D) -> Result<Vec<Disk>, D::Error>
where
D: Deserializer<'de>,
{
- let disks = <Vec<(usize, String, f64, String, usize, String)>>::deserialize(deserializer)?;
+ let disks =
+ <Vec<(usize, String, f64, String, Option<usize>, String)>>::deserialize(deserializer)?;
Ok(disks
.into_iter()
.map(
diff --git a/proxmox-tui-installer/src/views/bootdisk.rs b/proxmox-tui-installer/src/views/bootdisk.rs
index a018e71..d01495e 100644
--- a/proxmox-tui-installer/src/views/bootdisk.rs
+++ b/proxmox-tui-installer/src/views/bootdisk.rs
@@ -642,7 +642,9 @@ fn check_zfs_raid_config(
// See also Proxmox/Install.pm:get_zfs_raid_setup()
for disk in disks {
- if runinfo.boot_type != BootType::Efi && disk.block_size == 4096 {
+ if runinfo.boot_type != BootType::Efi
+ && disk.block_size.map(|v| v == 4096).unwrap_or_default()
+ {
return Err("Booting from 4Kn drive in legacy BIOS mode is not supported.".to_owned());
}
}
@@ -728,7 +730,7 @@ mod tests {
path: format!("/dev/dummy{index}"),
model: Some("Dummy disk".to_owned()),
size: 1024. * 1024. * 1024. * 8.,
- block_size: 512,
+ block_size: Some(512),
}
}
@@ -799,14 +801,20 @@ mod tests {
#[test]
fn zfs_raid_bios() {
- let disks = dummy_disks(10);
let runinfo = dummy_runinfo(BootType::Bios);
+ let mut disks = dummy_disks(10);
+ zfs_common_tests(&disks, &runinfo);
+
+ for disk in &mut disks {
+ disk.block_size = None;
+ }
+ // Should behave the same as if an explicit block size of 512 was set
zfs_common_tests(&disks, &runinfo);
for i in 0..10 {
let mut disks = dummy_disks(10);
- disks[i].block_size = 4096;
+ disks[i].block_size = Some(4096);
// Must fail if /any/ of the disks are 4Kn
assert!(check_zfs_raid_config(&runinfo, ZfsRaidLevel::Raid0, &disks).is_err());
--
2.41.0
More information about the pve-devel
mailing list