From: Radoslaw Zarzynski Date: Wed, 1 May 2024 14:06:29 +0000 (+0000) Subject: crimson/osd: clamp reads to object size and bring full read trimming X-Git-Tag: v19.1.1~245^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F58023%2Fhead;p=ceph.git crimson/osd: clamp reads to object size and bring full read trimming Signed-off-by: Radoslaw Zarzynski (cherry picked from commit 788c364de79787df5d6d808e423cb36b579f4fa7) --- 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)) {