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:
+1
-1
@@ -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"
|
||||||
|
|||||||
@@ -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),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user