From 5bb3fc4f7c1518e97f95be4ae2ea799659106055 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 9 Jun 2016 15:35:57 -0400 Subject: [PATCH] os/bluestore: include device offsets in csum error message Signed-off-by: Sage Weil --- src/os/bluestore/BlueStore.cc | 22 ++++++++++++++++------ src/os/bluestore/BlueStore.h | 5 ++++- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index a78bbc29ffbcc..ed4798d9f8ef3 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -3304,8 +3304,7 @@ int BlueStore::_do_read( assert(r == 0); compressed_bl.claim_append(t); }); - if (bptr->blob.csum_type != bluestore_blob_t::CSUM_NONE && - _verify_csum(&bptr->blob, 0, compressed_bl) < 0) { + if (_verify_csum(o, &bptr->blob, 0, compressed_bl) < 0) { return -EIO; } r = _decompress(compressed_bl, &raw_bl); @@ -3348,7 +3347,7 @@ int BlueStore::_do_read( assert(r == 0); bl.claim_append(t); }); - int r = _verify_csum(&bptr->blob, r_off, bl); + int r = _verify_csum(o, &bptr->blob, r_off, bl); if (r < 0) { return r; } @@ -3394,15 +3393,26 @@ int BlueStore::_do_read( return r; } -int BlueStore::_verify_csum(const bluestore_blob_t* blob, uint64_t blob_xoffset, +int BlueStore::_verify_csum(OnodeRef& o, + const bluestore_blob_t* blob, uint64_t blob_xoffset, const bufferlist& bl) const { int bad; int r = blob->verify_csum(blob_xoffset, bl, &bad); if (r < 0) { if (r == -1) { - dout(20) << __func__ << " bad checksum at blob offset 0x" - << std::hex << bad << std::dec << dendl; + vector pex; + blob->map( + blob_xoffset, + blob->get_csum_chunk_size(), + [&](uint64_t offset, uint64_t length) { + pex.emplace_back(bluestore_pextent_t(offset, length)); + }); + derr << __func__ << " bad " << blob->get_csum_type_string(blob->csum_type) + << "/0x" << std::hex << blob->get_csum_chunk_size() + << " checksum at blob offset 0x" << bad << std::dec + << ", device location " << pex + << ", object " << o->oid << dendl; } else { derr << __func__ << " failed with exit code: " << cpp_strerror(r) << dendl; } diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 7cd38584b0eb3..5e67cd7e6a5b7 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -1325,7 +1325,10 @@ private: // -------------------------------------------------------- // read processing internal methods - int _verify_csum(const bluestore_blob_t* blob, uint64_t blob_xoffset, const bufferlist& bl) const; + int _verify_csum(OnodeRef& o, + const bluestore_blob_t* blob, + uint64_t blob_xoffset, + const bufferlist& bl) const; int _decompress(bufferlist& source, bufferlist* result); -- 2.39.5