From fc4659155406432404d6e7afb63de545e4abf1a6 Mon Sep 17 00:00:00 2001 From: Nathan Cutler Date: Sat, 12 Nov 2016 12:37:00 +0100 Subject: [PATCH] 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 --- src/osd/ECBackend.cc | 5 ++++- src/osd/ReplicatedBackend.cc | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/osd/ECBackend.cc b/src/osd/ECBackend.cc index 8f2b571acc4..c35a4006883 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 5136fa58a3f..7228a12030a 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(); -- 2.47.3