Merge PR #23052 into master

* refs/pull/23052/head:
	osd: fix deep scrub with osd_skip_data_digest=true (default) and bluestore

Reviewed-by: David Zafman <dzafman@redhat.com>
Reviewed-by: xie xingguo <xie.xingguo@zte.com.cn>
Reviewed-by: Josh Durgin <jdurgin@redhat.com>
This commit is contained in:
Sage Weil 2018-07-17 07:18:25 -05:00
commit 23cb424934
2 changed files with 5 additions and 13 deletions

View File

@ -2414,8 +2414,6 @@ int ECBackend::be_deep_scrub(
{
dout(10) << __func__ << " " << poid << " pos " << pos << dendl;
int r;
bool skip_data_digest = store->has_builtin_csum() &&
g_conf()->osd_skip_data_digest;
uint32_t fadvise_flags = CEPH_OSD_OP_FLAG_FADVISE_SEQUENTIAL |
CEPH_OSD_OP_FLAG_FADVISE_DONTNEED;
@ -2456,7 +2454,7 @@ int ECBackend::be_deep_scrub(
o.read_error = true;
return 0;
}
if (r > 0 && !skip_data_digest) {
if (r > 0) {
pos.data_hash << bl;
}
pos.data_pos += r;
@ -2482,8 +2480,7 @@ int ECBackend::be_deep_scrub(
return 0;
}
if (!skip_data_digest &&
hinfo->get_chunk_hash(get_parent()->whoami_shard().shard) !=
if (hinfo->get_chunk_hash(get_parent()->whoami_shard().shard) !=
pos.data_hash.digest()) {
dout(0) << "_scan_list " << poid << " got incorrect hash on read 0x"
<< std::hex << pos.data_hash.digest() << " != expected 0x"

View File

@ -600,9 +600,6 @@ int ReplicatedBackend::be_deep_scrub(
uint32_t fadvise_flags = CEPH_OSD_OP_FLAG_FADVISE_SEQUENTIAL |
CEPH_OSD_OP_FLAG_FADVISE_DONTNEED;
bool skip_data_digest = store->has_builtin_csum() &&
g_conf()->osd_skip_data_digest;
utime_t sleeptime;
sleeptime.set_from_double(cct->_conf->osd_debug_deep_scrub_sleep);
if (sleeptime != utime_t()) {
@ -630,7 +627,7 @@ int ReplicatedBackend::be_deep_scrub(
o.read_error = true;
return 0;
}
if (r > 0 && !skip_data_digest) {
if (r > 0) {
pos.data_hash << bl;
}
pos.data_pos += r;
@ -641,10 +638,8 @@ int ReplicatedBackend::be_deep_scrub(
}
// done with bytes
pos.data_pos = -1;
if (!skip_data_digest) {
o.digest = pos.data_hash.digest();
o.digest_present = true;
}
o.digest = pos.data_hash.digest();
o.digest_present = true;
dout(20) << __func__ << " " << poid << " done with data, digest 0x"
<< std::hex << o.digest << std::dec << dendl;
}