From db26096c1215f1b85d2cc58ff98f6a59a982bfc7 Mon Sep 17 00:00:00 2001 From: David Zafman Date: Tue, 26 Mar 2019 15:53:10 -0700 Subject: [PATCH] osd: Don't evict after a flush if intersecting scrub range Fixes: http://tracker.ceph.com/issues/38840 Signed-off-by: David Zafman (cherry picked from commit 459cbb5a6ca3b521b20f36f328f25f398d0ef1c4) --- src/osd/PrimaryLogPG.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index 7eb43c2891384..bffe72ccaa037 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -14065,6 +14065,11 @@ bool PrimaryLogPG::agent_maybe_evict(ObjectContextRef& obc, bool after_flush) dout(20) << __func__ << " skip (dirty) " << obc->obs.oi << dendl; return false; } + // This is already checked by agent_work() which passes after_flush = false + if (after_flush && range_intersects_scrub(soid, soid.get_head())) { + dout(20) << __func__ << " skip (scrubbing) " << obc->obs.oi << dendl; + return false; + } if (!obc->obs.oi.watchers.empty()) { dout(20) << __func__ << " skip (watchers) " << obc->obs.oi << dendl; return false; -- 2.39.5