diff --git a/crates/ecstore/src/disk/error.rs b/crates/ecstore/src/disk/error.rs index 1e8c94761..8e551b4af 100644 --- a/crates/ecstore/src/disk/error.rs +++ b/crates/ecstore/src/disk/error.rs @@ -627,7 +627,13 @@ impl From for DiskError { impl Clone for DiskError { fn clone(&self) -> Self { match self { - DiskError::Io(io_error) => DiskError::Io(std::io::Error::new(io_error.kind(), io_error.to_string())), + DiskError::Io(io_error) => DiskError::Io( + rustfs_rio::clone_internode_http_io_error(io_error) + .and_then(std::io::Error::into_inner) + // The helper derives a kind from the source; Clone must retain the original outer kind. + .map(|source| std::io::Error::new(io_error.kind(), source)) + .unwrap_or_else(|| std::io::Error::new(io_error.kind(), io_error.to_string())), + ), DiskError::MaxVersionsExceeded => DiskError::MaxVersionsExceeded, DiskError::Unexpected => DiskError::Unexpected, DiskError::CorruptedFormat => DiskError::CorruptedFormat,