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 <anbelski@linux.microsoft.com>
This commit is contained in:
Anatol Belski
2026-04-17 10:06:21 +02:00
committed by Rob Bradford
parent 4416a582c8
commit cd9fc52472

View File

@@ -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<Self> {
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)
})?)),
})
}