From 925caf4bef7662c7d1da9e0a5b9589fba25b2895 Mon Sep 17 00:00:00 2001 From: David Zafman Date: Wed, 1 Aug 2018 17:14:59 -0700 Subject: [PATCH] osd: do_read(): Use actual bytes read to determine if CRC can be checked Signed-off-by: David Zafman (cherry picked from commit 48d7448d72834810cf13eca1425e0cf0e8570c7a) Conflicts: src/osd/PrimaryLogPG.cc (trivial) --- src/osd/PrimaryLogPG.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index 4aa89555e4b6..65e9897cf06e 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -5439,8 +5439,8 @@ int PrimaryLogPG::do_read(OpContext *ctx, OSDOp& osd_op) { int r = pgbackend->objects_read_sync( soid, op.extent.offset, op.extent.length, op.flags, &osd_op.outdata); // whole object? can we verify the checksum? - if (!skip_data_digest && - r >= 0 && op.extent.length == oi.size && oi.is_data_digest()) { + if (!skip_data_digest && r >= 0 && op.extent.offset == 0 && + (uint64_t)r == oi.size && oi.is_data_digest()) { uint32_t crc = osd_op.outdata.crc32c(-1); if (oi.data_digest != crc) { osd->clog->error() << info.pgid << std::hex -- 2.47.3