]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: do_read(): Use actual bytes read to determine if CRC can be checked
authorDavid Zafman <dzafman@redhat.com>
Thu, 2 Aug 2018 00:14:59 +0000 (17:14 -0700)
committerDavid Zafman <dzafman@redhat.com>
Mon, 30 Jul 2018 10:32:40 +0000 (03:32 -0700)
Signed-off-by: David Zafman <dzafman@redhat.com>
(cherry picked from commit 48d7448d72834810cf13eca1425e0cf0e8570c7a)

Conflicts:
src/osd/PrimaryLogPG.cc (trivial)

src/osd/PrimaryLogPG.cc

index f60ec12ccab64f9a6e6ca62c0bcfe1bc114fcb04..99688aee4dd6db85ce5c9accb0affcbf2dd2cd1c 100644 (file)
@@ -4874,8 +4874,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