From: Jianpeng Ma Date: Mon, 2 Mar 2015 03:23:44 +0000 (+0800) Subject: osdc: After write try merge bh. X-Git-Tag: v0.94.4~25^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=86e7698a19745c26b9d3e7a12a16c87ea9a5d565;p=ceph.git osdc: After write try merge bh. Signed-off-by: Jianpeng Ma (cherry picked from commit 1a48a8a2b222e41236341cb1241f0885a1b0b9d8) --- diff --git a/src/osdc/ObjectCacher.cc b/src/osdc/ObjectCacher.cc index 5d54ed8a88f9..995b37bdc622 100644 --- a/src/osdc/ObjectCacher.cc +++ b/src/osdc/ObjectCacher.cc @@ -886,6 +886,7 @@ void ObjectCacher::bh_write_commit(int64_t poolid, sobject_t oid, loff_t start, } } + list hit; // apply to bh's! for (map::iterator p = ob->data_lower_bound(start); p != ob->data.end(); @@ -917,6 +918,7 @@ void ObjectCacher::bh_write_commit(int64_t poolid, sobject_t oid, loff_t start, if (r >= 0) { // ok! mark bh clean and error-free mark_clean(bh); + hit.push_back(bh); ldout(cct, 10) << "bh_write_commit clean " << *bh << dendl; } else { mark_dirty(bh); @@ -926,6 +928,13 @@ void ObjectCacher::bh_write_commit(int64_t poolid, sobject_t oid, loff_t start, } } + for (list::iterator bh = hit.begin(); + bh != hit.end(); + ++bh) { + assert(*bh); + ob->try_merge_bh(*bh); + } + // update last_commit. assert(ob->last_commit_tid < tid); ob->last_commit_tid = tid;