From a886f99a000aa470b4aa874be7842bcfcbe81216 Mon Sep 17 00:00:00 2001 From: Alex Lyn Date: Mon, 13 Jul 2026 11:36:45 +0800 Subject: [PATCH] runtime-rs: Map and propagate block discard to CH sparse disks Add the Cloud Hypervisor disk sparse option to the local DiskConfig model and keep its default aligned with upstream. Map BlockConfigModern.discard_unmap to DiskConfig.sparse so block devices that request discard/unmap explicitly expose sparse discard support through the CH API. Signed-off-by: Alex Lyn --- .../crates/hypervisor/ch-config/src/lib.rs | 29 ++++++++++++++++++- .../crates/hypervisor/src/ch/inner_device.rs | 1 + 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/runtime-rs/crates/hypervisor/ch-config/src/lib.rs b/src/runtime-rs/crates/hypervisor/ch-config/src/lib.rs index 2fb2fcceb6..75cf0ba0d9 100644 --- a/src/runtime-rs/crates/hypervisor/ch-config/src/lib.rs +++ b/src/runtime-rs/crates/hypervisor/ch-config/src/lib.rs @@ -123,7 +123,7 @@ pub enum ImageType { Unknown, } -#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize, Default)] +#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] pub struct DiskConfig { pub path: Option, #[serde(default)] @@ -148,10 +148,37 @@ pub struct DiskConfig { pub disable_io_uring: bool, #[serde(default)] pub pci_segment: u16, + #[serde(default = "default_diskconfig_sparse")] + pub sparse: bool, #[serde(default)] pub image_type: ImageType, } +pub fn default_diskconfig_sparse() -> bool { + true +} + +impl Default for DiskConfig { + fn default() -> Self { + Self { + path: None, + readonly: false, + direct: false, + iommu: false, + num_queues: 0, + queue_size: 0, + vhost_user: false, + vhost_socket: None, + rate_limiter_config: None, + id: None, + disable_io_uring: false, + pci_segment: 0, + sparse: default_diskconfig_sparse(), + image_type: ImageType::default(), + } + } +} + #[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize, Default)] pub struct FsConfig { pub tag: String, diff --git a/src/runtime-rs/crates/hypervisor/src/ch/inner_device.rs b/src/runtime-rs/crates/hypervisor/src/ch/inner_device.rs index f988a64e0d..399981ed85 100644 --- a/src/runtime-rs/crates/hypervisor/src/ch/inner_device.rs +++ b/src/runtime-rs/crates/hypervisor/src/ch/inner_device.rs @@ -522,6 +522,7 @@ impl TryFrom for DiskConfig { readonly: blkcfg.is_readonly, num_queues: blkcfg.num_queues, queue_size: blkcfg.queue_size as u16, + sparse: blkcfg.discard_unmap, image_type: ImageType::Raw, ..Default::default() };