From b9b1be6d681b354fa31a3c544660dcdc7c35e5a8 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 24 Oct 2012 14:41:38 -0700 Subject: [PATCH] osdc/ObjectCacher: set complete flag when we observe ENOENT If we observe an ENOENT on a read, set the complete flag. Any dirty buffers we have will still be in memory, even if the write are in flight, because the TX state remains pinned until the writes commit. Writes cannot proceed faster than reads, even though reads may proceed faster than writes. Signed-off-by: Sage Weil --- src/osdc/ObjectCacher.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/osdc/ObjectCacher.cc b/src/osdc/ObjectCacher.cc index 708fb4872f14f..c56423b32a67d 100644 --- a/src/osdc/ObjectCacher.cc +++ b/src/osdc/ObjectCacher.cc @@ -562,6 +562,11 @@ void ObjectCacher::bh_read_finish(int64_t poolid, sobject_t oid, loff_t start, } else { Object *ob = objects[poolid][oid]; + if (r == -ENOENT && !ob->complete) { + ldout(cct, 7) << "bh_read_finish ENOENT, marking complete on " << *ob << dendl; + ob->complete = true; + } + // apply to bh's! loff_t opos = start; while (true) { -- 2.39.5