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
This commit is contained in:
2026-04-27 18:38:57 -07:00
parent 8fa748cdb4
commit 4b353d674f
3 changed files with 3 additions and 1 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "libfreemkv" name = "libfreemkv"
version = "0.13.26" version = "0.13.27"
edition = "2024" edition = "2024"
rust-version = "1.86" rust-version = "1.86"
license = "AGPL-3.0-only" license = "AGPL-3.0-only"
+1
View File
@@ -5,6 +5,7 @@
pub(crate) fn extract_scsi_context(e: &Error) -> (u8, Option<crate::scsi::ScsiSense>) { pub(crate) fn extract_scsi_context(e: &Error) -> (u8, Option<crate::scsi::ScsiSense>) {
match e { match e {
Error::ScsiError { status, sense, .. } => (*status, *sense), Error::ScsiError { status, sense, .. } => (*status, *sense),
Error::DiscRead { status, sense, .. } => (status.unwrap_or(0), *sense),
_ => (0, None), _ => (0, None),
} }
} }
+1
View File
@@ -490,6 +490,7 @@ impl Error {
pub fn scsi_sense(&self) -> Option<&crate::scsi::ScsiSense> { pub fn scsi_sense(&self) -> Option<&crate::scsi::ScsiSense> {
match self { match self {
Error::ScsiError { sense: Some(s), .. } => Some(s), Error::ScsiError { sense: Some(s), .. } => Some(s),
Error::DiscRead { sense: Some(s), .. } => Some(s),
_ => None, _ => None,
} }
} }