From e6a7e9d2e55ad4adaaebbc4bcaec1d0591a62b53 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sat, 14 May 2016 08:39:45 -0400 Subject: [PATCH] os/bluestore: simplify _verify_csum Signed-off-by: Sage Weil --- src/os/bluestore/BlueStore.cc | 34 +++++++--------------------------- 1 file changed, 7 insertions(+), 27 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 261104b48f3..8200bb6ce88 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -3053,38 +3053,18 @@ int BlueStore::_blob2read_to_extents2read( int BlueStore::_verify_csum(const bluestore_blob_t* blob, uint64_t blob_xoffset, const bufferlist& bl) const { - uint64_t block_size = blob->get_csum_block_size(); - size_t csum_len = blob->get_csum_value_size(); - - assert((blob_xoffset % block_size) == 0); - assert((bl.length() % block_size) == 0); - - uint64_t block0 = blob_xoffset / block_size; - uint64_t blocks = bl.length() / block_size; - - assert(blob->csum_data.size() >= (block0 + blocks) * csum_len); - - vector csum_data; - csum_data.resize(blob->get_csum_value_size() * blocks); - - vector::const_iterator start = blob->csum_data.cbegin(); - vector::const_iterator end = blob->csum_data.cbegin(); - start += block0 * csum_len; - end += (block0 + blocks) * csum_len; - - checksummer->calculate( + int bad = checksummer->verify( blob->csum_type, blob->get_csum_block_size(), - 0, + blob_xoffset, bl.length(), bl, - &csum_data); - - int r = 0; //m_csum_verifier.verify((bluestore_blob_t::CSumType)blob->csum_type, blob->get_csum_value_size(), blob->get_csum_block_size(), bl, opaque, csum_data); - if(std::equal(start, end, csum_data.begin())) { - r = -1; + blob->csum_data); + if (bad >= 0) { + dout(20) << __func__ << " at blob offset 0x" << bad << dendl; + return -1; } - return r; + return 0; } int BlueStore::_decompress(const bufferlist& source, bufferlist* result) -- 2.47.3