From: Sage Weil Date: Wed, 24 Oct 2012 21:41:38 +0000 (-0700) Subject: osdc/ObjectCacher: set complete flag when we observe ENOENT X-Git-Tag: v0.55~130^2~55^2^2~9 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b9b1be6d681b354fa31a3c544660dcdc7c35e5a8;p=ceph.git 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 --- diff --git a/src/osdc/ObjectCacher.cc b/src/osdc/ObjectCacher.cc index 708fb4872f14..c56423b32a67 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) {