From 4b353d674fe1b5eef19b897f32940a7ca27ac2bb Mon Sep 17 00:00:00 2001 From: Matthew Jackson Date: Mon, 27 Apr 2026 18:38:57 -0700 Subject: [PATCH] disc: DiscRead carries SCSI status/sense Fix extract_scsi_context() and Error::scsi_sense() to handle Error::DiscRead in addition to Error::ScsiError, so is_marginal_read() works for DiscRead errors and disc::copy() can properly route MEDIUM ERROR as a marginal (bad sector) instead of bailing. Closes: freemkv-private#20260427 --- Cargo.toml | 2 +- src/drive/mod.rs | 1 + src/error.rs | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 890fd71..9f109b1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "libfreemkv" -version = "0.13.26" +version = "0.13.27" edition = "2024" rust-version = "1.86" license = "AGPL-3.0-only" diff --git a/src/drive/mod.rs b/src/drive/mod.rs index c9fe93b..53ebd7f 100644 --- a/src/drive/mod.rs +++ b/src/drive/mod.rs @@ -5,6 +5,7 @@ pub(crate) fn extract_scsi_context(e: &Error) -> (u8, Option) { match e { Error::ScsiError { status, sense, .. } => (*status, *sense), + Error::DiscRead { status, sense, .. } => (status.unwrap_or(0), *sense), _ => (0, None), } } diff --git a/src/error.rs b/src/error.rs index b63c9b9..43794e6 100644 --- a/src/error.rs +++ b/src/error.rs @@ -490,6 +490,7 @@ impl Error { pub fn scsi_sense(&self) -> Option<&crate::scsi::ScsiSense> { match self { Error::ScsiError { sense: Some(s), .. } => Some(s), + Error::DiscRead { sense: Some(s), .. } => Some(s), _ => None, } }