From 92109136f16dcc664ffa7e9a0bdc16ee2e3b1719 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Mon, 23 Mar 2026 12:04:08 +0100 Subject: [PATCH] block: Include actual segment count in TooManySegments error Include the number of segments found in the request payload in the TooManySegments error variant so the logged message shows both the actual and maximum values. Suggested-by: Philipp Schuster Signed-off-by: Anatol Belski --- block/src/lib.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/block/src/lib.rs b/block/src/lib.rs index e6b23b387..0640611c7 100644 --- a/block/src/lib.rs +++ b/block/src/lib.rs @@ -110,8 +110,8 @@ pub enum Error { RawFileError(#[source] std::io::Error), #[error("The requested operation does not support multiple descriptors")] TooManyDescriptors, - #[error("Request contains too many segments")] - TooManySegments, + #[error("Request contains too many segments ({0}, max {MAX_DISCARD_WRITE_ZEROES_SEG})")] + TooManySegments(u32), #[error("Failure in vhdx")] VhdxError(#[source] VhdxError), } @@ -602,7 +602,9 @@ impl Request { return Err(ExecuteError::BadRequest(Error::DescriptorLengthTooSmall)); } if data_len > DISCARD_WZ_MAX_PAYLOAD { - return Err(ExecuteError::BadRequest(Error::TooManySegments)); + return Err(ExecuteError::BadRequest(Error::TooManySegments( + data_len.div_ceil(DISCARD_WZ_SEG_SIZE), + ))); } let mut discard_sector = [0u8; 8]; @@ -651,7 +653,9 @@ impl Request { return Err(ExecuteError::BadRequest(Error::DescriptorLengthTooSmall)); } if data_len > DISCARD_WZ_MAX_PAYLOAD { - return Err(ExecuteError::BadRequest(Error::TooManySegments)); + return Err(ExecuteError::BadRequest(Error::TooManySegments( + data_len.div_ceil(DISCARD_WZ_SEG_SIZE), + ))); } let mut wz_sector = [0u8; 8];