From: Nathan Cutler Date: Sat, 12 Nov 2016 11:37:00 +0000 (+0100) Subject: pg: restore correct behavior of read() callers X-Git-Tag: v0.94.10~51^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=fc4659155406432404d6e7afb63de545e4abf1a6;p=ceph.git pg: restore correct behavior of read() callers This patch is inspired by fabd6357e42e526d2704d7cb80375c12d731df8d but is not a cherry-pick. Fixes: http://tracker.ceph.com/issues/16870 Signed-off-by: Nathan Cutler --- diff --git a/src/osd/ECBackend.cc b/src/osd/ECBackend.cc index 8f2b571acc44..c35a40068837 100644 --- a/src/osd/ECBackend.cc +++ b/src/osd/ECBackend.cc @@ -1778,6 +1778,9 @@ void ECBackend::be_deep_scrub( if (stride % sinfo.get_chunk_size()) stride += sinfo.get_chunk_size() - (stride % sinfo.get_chunk_size()); uint64_t pos = 0; + + uint32_t fadvise_flags = CEPH_OSD_OP_FLAG_FADVISE_SEQUENTIAL | CEPH_OSD_OP_FLAG_FADVISE_DONTNEED; + while (true) { bufferlist bl; handle.reset_tp_timeout(); @@ -1787,7 +1790,7 @@ void ECBackend::be_deep_scrub( poid, ghobject_t::NO_GEN, get_parent()->whoami_shard().shard), pos, stride, bl, - true); + fadvise_flags, true); if (r < 0) break; if (bl.length() % sinfo.get_chunk_size()) { diff --git a/src/osd/ReplicatedBackend.cc b/src/osd/ReplicatedBackend.cc index 5136fa58a3f3..7228a12030ac 100644 --- a/src/osd/ReplicatedBackend.cc +++ b/src/osd/ReplicatedBackend.cc @@ -750,13 +750,16 @@ void ReplicatedBackend::be_deep_scrub( bufferlist bl, hdrbl; int r; __u64 pos = 0; + + uint32_t fadvise_flags = CEPH_OSD_OP_FLAG_FADVISE_SEQUENTIAL | CEPH_OSD_OP_FLAG_FADVISE_DONTNEED; + while ( (r = store->read( coll, ghobject_t( poid, ghobject_t::NO_GEN, get_parent()->whoami_shard().shard), pos, cct->_conf->osd_deep_scrub_stride, bl, - true)) > 0) { + fadvise_flags, true)) > 0) { handle.reset_tp_timeout(); h << bl; pos += bl.length();