From 555c7b3c8776ae13b16dcd286f0eab41724327a4 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Wed, 1 May 2024 14:06:29 +0000 Subject: [PATCH] crimson/osd: clamp reads to object size and bring full read trimming Signed-off-by: Radoslaw Zarzynski (cherry picked from commit 788c364de79787df5d6d808e423cb36b579f4fa7) --- src/crimson/osd/pg_backend.cc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index 143f522bb3751..fdfdd179575d5 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -241,14 +241,20 @@ PGBackend::read(const ObjectState& os, OSDOp& osd_op, (op.extent.truncate_size < size)) { size = op.extent.truncate_size; } - if (offset >= size) { - // read size was trimmed to zero and it is expected to do nothing, - return read_errorator::now(); - } if (!length) { // read the whole object if length is 0 length = size; } + if (offset >= size) { + // read size was trimmed to zero and it is expected to do nothing, + return read_errorator::now(); + } else if (offset + length > size) { + length = size - op.extent.offset; + if (!length) { + // this is the second trimmed_read case + return read_errorator::now(); + } + } return _read(oi.soid, offset, length, op.flags).safe_then_interruptible_tuple( [&delta_stats, &oi, &osd_op](auto&& bl) -> read_errorator::future<> { if (!_read_verify_data(oi, bl)) { -- 2.39.5