From: Jianpeng Ma Date: Fri, 21 Oct 2016 13:47:55 +0000 (+0800) Subject: osdc: After write try merge bh. X-Git-Tag: v11.1.0~340^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8aaa8549fb58e01956069cd491ee452d78ef94f3;p=ceph.git osdc: After write try merge bh. Signed-off-by: Jianpeng Ma --- diff --git a/src/osdc/ObjectCacher.cc b/src/osdc/ObjectCacher.cc index bdaf0f806a9..3c350bd1e5f 100644 --- a/src/osdc/ObjectCacher.cc +++ b/src/osdc/ObjectCacher.cc @@ -1114,6 +1114,7 @@ void ObjectCacher::bh_write_commit(int64_t poolid, sobject_t oid, } } + vector> hit; // apply to bh's! for (map::const_iterator p = ob->data_lower_bound(start); p != ob->data.end(); @@ -1148,6 +1149,7 @@ void ObjectCacher::bh_write_commit(int64_t poolid, sobject_t oid, bh->set_journal_tid(0); if (bh->get_nocache()) bh_lru_rest.lru_bottouch(bh); + hit.push_back(make_pair(bh->start(), bh)); ldout(cct, 10) << "bh_write_commit clean " << *bh << dendl; } else { mark_dirty(bh); @@ -1156,6 +1158,12 @@ void ObjectCacher::bh_write_commit(int64_t poolid, sobject_t oid, << dendl; } } + + for (auto& p : hit) { + //p.second maybe merged and deleted in merge_left + if (ob->data.count(p.first)) + ob->try_merge_bh(p.second); + } } // update last_commit.