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() };