From cd9fc52472b02edd1a7ce6c8ef517d366d241a15 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Fri, 17 Apr 2026 10:06:21 +0200 Subject: [PATCH] block: vhdx: Classify VhdxError variants in VhdxDiskSync::new Replace the blanket BlockErrorKind::Io mapping with an explicit match on all VhdxError variants: NotVhdx, ParseVhdxHeader, ParseVhdxMetadata, ParseVhdxRegionEntry => InvalidFormat ReadBatEntry => CorruptImage ReadFailed, WriteFailed => Io Signed-off-by: Anatol Belski --- block/src/vhdx_sync.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/block/src/vhdx_sync.rs b/block/src/vhdx_sync.rs index 7d4f28e33..01ae4f346 100644 --- a/block/src/vhdx_sync.rs +++ b/block/src/vhdx_sync.rs @@ -11,7 +11,7 @@ use vmm_sys_util::eventfd::EventFd; use crate::async_io::{AsyncIo, AsyncIoError, AsyncIoResult, BorrowedDiskFd, DiskFileError}; use crate::error::{BlockError, BlockErrorKind, BlockResult, ErrorOp}; -use crate::vhdx::Vhdx; +use crate::vhdx::{Vhdx, VhdxError}; use crate::{AsyncAdaptor, BlockBackend, Error, disk_file}; #[derive(Debug)] @@ -31,7 +31,15 @@ impl VhdxDiskSync { pub fn new(f: File) -> BlockResult { Ok(VhdxDiskSync { vhdx_file: Arc::new(Mutex::new(Vhdx::new(f).map_err(|e| { - BlockError::new(BlockErrorKind::Io, e).with_op(ErrorOp::Open) + let kind = match &e { + VhdxError::NotVhdx(_) + | VhdxError::ParseVhdxHeader(_) + | VhdxError::ParseVhdxMetadata(_) + | VhdxError::ParseVhdxRegionEntry(_) => BlockErrorKind::InvalidFormat, + VhdxError::ReadBatEntry(_) => BlockErrorKind::CorruptImage, + VhdxError::ReadFailed(_) | VhdxError::WriteFailed(_) => BlockErrorKind::Io, + }; + BlockError::new(kind, e).with_op(ErrorOp::Open) })?)), }) }