From 6390ea731292643a2e653dff58259c027ee4cfbe Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 23 Jan 2017 18:51:06 -0600 Subject: [PATCH] os/bluestore: include logical object offset in crc error message This is more useful to the user. Signed-off-by: Sage Weil --- src/os/bluestore/BlueStore.cc | 17 ++++++++++++----- src/os/bluestore/BlueStore.h | 10 ++++++---- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index bc7baffe0e6..cf7ae8eab1c 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -5314,7 +5314,8 @@ int BlueStore::_do_read( if (r < 0) return r; - if (_verify_csum(o, &bptr->get_blob(), 0, compressed_bl) < 0) { + if (_verify_csum(o, &bptr->get_blob(), 0, compressed_bl, + b2r_it->second.front().logical_offset) < 0) { return -EIO; } r = _decompress(compressed_bl, &raw_bl); @@ -5363,7 +5364,7 @@ int BlueStore::_do_read( if (r < 0) return r; - r = _verify_csum(o, &bptr->get_blob(), r_off, bl); + r = _verify_csum(o, &bptr->get_blob(), r_off, bl, reg.logical_offset); if (r < 0) { return -EIO; } @@ -5412,7 +5413,8 @@ int BlueStore::_do_read( int BlueStore::_verify_csum(OnodeRef& o, const bluestore_blob_t* blob, uint64_t blob_xoffset, - const bufferlist& bl) const + const bufferlist& bl, + uint64_t logical_offset) const { int bad; uint64_t bad_csum; @@ -5429,13 +5431,18 @@ int BlueStore::_verify_csum(OnodeRef& o, return 0; }); assert(r == 0); - derr << __func__ << " bad " << Checksummer::get_csum_type_string(blob->csum_type) + derr << __func__ << " bad " + << Checksummer::get_csum_type_string(blob->csum_type) << "/0x" << std::hex << blob->get_csum_chunk_size() << " checksum at blob offset 0x" << bad << ", got 0x" << bad_csum << ", expected 0x" << blob->get_csum_item(bad / blob->get_csum_chunk_size()) << std::dec << ", device location " << pex - << ", object " << o->oid << dendl; + << ", object " << o->oid + << ", logical extent 0x" << std::hex + << (logical_offset + bad - blob_xoffset) << "~" + << blob->get_csum_chunk_size() << std::dec + << 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 cae0de95b2b..95eb4a22040 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -2016,10 +2016,12 @@ private: // -------------------------------------------------------- // read processing internal methods - int _verify_csum(OnodeRef& o, - 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, + uint64_t logical_offset) const; int _decompress(bufferlist& source, bufferlist* result); -- 2.39.5