From dc53c1230306c8352801353c7b4c36a2a975035f Mon Sep 17 00:00:00 2001 From: Tiago Castro Date: Mon, 29 Jan 2024 10:52:54 +0000 Subject: [PATCH] fix(rebuild): add same device validation Signed-off-by: Tiago Castro --- io-engine/src/rebuild/rebuild_descriptor.rs | 6 ++++++ io-engine/src/rebuild/rebuild_error.rs | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/io-engine/src/rebuild/rebuild_descriptor.rs b/io-engine/src/rebuild/rebuild_descriptor.rs index 92cdda575..ebd031998 100644 --- a/io-engine/src/rebuild/rebuild_descriptor.rs +++ b/io-engine/src/rebuild/rebuild_descriptor.rs @@ -86,6 +86,12 @@ impl RebuildDescriptor { bdev: dst_uri.to_string(), })?; + if src_descriptor.device_name() == dst_descriptor.device_name() { + return Err(RebuildError::SameBdev { + bdev: src_descriptor.device_name(), + }); + } + let source_hdl = RebuildDescriptor::io_handle(&*src_descriptor).await?; let destination_hdl = RebuildDescriptor::io_handle(&*dst_descriptor).await?; diff --git a/io-engine/src/rebuild/rebuild_error.rs b/io-engine/src/rebuild/rebuild_error.rs index a8f302ab5..0150b7764 100644 --- a/io-engine/src/rebuild/rebuild_error.rs +++ b/io-engine/src/rebuild/rebuild_error.rs @@ -15,6 +15,10 @@ pub enum RebuildError { NoCopyBuffer { source: DmaError }, #[snafu(display("Failed to validate rebuild job creation parameters"))] InvalidParameters {}, + #[snafu(display( + "The same device was specified for both source and destination: {bdev}" + ))] + SameBdev { bdev: String }, #[snafu(display("Failed to get a handle for bdev {}", bdev))] NoBdevHandle { source: CoreError, bdev: String }, #[snafu(display("Bdev {} not found", bdev))]