From e067c768802bb7ba4f40154176ab88f1e4ba9868 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Wed, 25 Feb 2026 15:18:43 +0100 Subject: [PATCH] tests: windows: Disable sparse for DM snapshot OS disks The Windows tests use a DM snapshot device for the OS disk. DM snapshot targets do not support BLKDISCARD, so the VMM returns IOERR for every TRIM attempt. viostor.sys may BSOD when the host returns an error for negotiated discard/write-zeroes operations. Add a default_disks_sparse_off() helper to GuestCommand and use it in all Windows tests. Signed-off-by: Anatol Belski --- cloud-hypervisor/tests/integration.rs | 18 +++++------ test_infra/src/lib.rs | 46 ++++++++++++--------------- 2 files changed, 30 insertions(+), 34 deletions(-) diff --git a/cloud-hypervisor/tests/integration.rs b/cloud-hypervisor/tests/integration.rs index 2037ad008..99a22f273 100644 --- a/cloud-hypervisor/tests/integration.rs +++ b/cloud-hypervisor/tests/integration.rs @@ -11537,7 +11537,7 @@ mod windows { .args(["--kernel", edk2_path().to_str().unwrap()]) .args(["--serial", "tty"]) .args(["--console", "off"]) - .default_disks() + .default_disks_sparse_off() .default_net() .capture_output() .spawn() @@ -11586,7 +11586,7 @@ mod windows { .args([ "--disk", format!( - "path={},num_queues=4", + "path={},num_queues=4,sparse=off", windows_guest .guest() .disk_config @@ -11654,7 +11654,7 @@ mod windows { .args(["--kernel", ovmf_path.to_str().unwrap()]) .args(["--serial", "tty"]) .args(["--console", "off"]) - .default_disks() + .default_disks_sparse_off() .default_net() .capture_output() .spawn() @@ -11743,7 +11743,7 @@ mod windows { .args(["--kernel", ovmf_path.to_str().unwrap()]) .args(["--serial", "tty"]) .args(["--console", "off"]) - .default_disks() + .default_disks_sparse_off() .default_net() .capture_output() .spawn() @@ -11818,7 +11818,7 @@ mod windows { .args(["--kernel", ovmf_path.to_str().unwrap()]) .args(["--serial", "tty"]) .args(["--console", "off"]) - .default_disks() + .default_disks_sparse_off() .default_net() .capture_output() .spawn() @@ -11892,7 +11892,7 @@ mod windows { .args(["--kernel", ovmf_path.to_str().unwrap()]) .args(["--serial", "tty"]) .args(["--console", "off"]) - .default_disks() + .default_disks_sparse_off() .default_net() .capture_output() .spawn() @@ -11966,7 +11966,7 @@ mod windows { .args(["--kernel", ovmf_path.to_str().unwrap()]) .args(["--serial", "tty"]) .args(["--console", "off"]) - .default_disks() + .default_disks_sparse_off() .default_net() .capture_output() .spawn() @@ -12062,7 +12062,7 @@ mod windows { .args(["--kernel", ovmf_path.to_str().unwrap()]) .args(["--serial", "tty"]) .args(["--console", "off"]) - .default_disks() + .default_disks_sparse_off() .default_net() .capture_output() .spawn() @@ -12194,7 +12194,7 @@ mod windows { .args(["--kernel", ovmf_path.to_str().unwrap()]) .args(["--serial", "tty"]) .args(["--console", "off"]) - .default_disks() + .default_disks_sparse_off() // The multi net dev config is borrowed from test_multiple_network_interfaces .args([ "--net", diff --git a/test_infra/src/lib.rs b/test_infra/src/lib.rs index 3ab550870..2848a130e 100644 --- a/test_infra/src/lib.rs +++ b/test_infra/src/lib.rs @@ -1448,35 +1448,31 @@ impl<'a> GuestCommand<'a> { } pub fn default_disks(&mut self) -> &mut Self { - if self.guest.disk_config.disk(DiskType::CloudInit).is_some() { + self.default_disks_inner(true) + } + + pub fn default_disks_sparse_off(&mut self) -> &mut Self { + self.default_disks_inner(false) + } + + fn default_disks_inner(&mut self, sparse: bool) -> &mut Self { + let sparse_opt = if sparse { "" } else { ",sparse=off" }; + let os_disk = format!( + "path={}{}", + self.guest + .disk_config + .disk(DiskType::OperatingSystem) + .unwrap(), + sparse_opt + ); + if let Some(cloud_init) = self.guest.disk_config.disk(DiskType::CloudInit) { self.args([ "--disk", - format!( - "path={}", - self.guest - .disk_config - .disk(DiskType::OperatingSystem) - .unwrap() - ) - .as_str(), - format!( - "path={}", - self.guest.disk_config.disk(DiskType::CloudInit).unwrap() - ) - .as_str(), + os_disk.as_str(), + format!("path={cloud_init}").as_str(), ]) } else { - self.args([ - "--disk", - format!( - "path={}", - self.guest - .disk_config - .disk(DiskType::OperatingSystem) - .unwrap() - ) - .as_str(), - ]) + self.args(["--disk", os_disk.as_str()]) } }