]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osdc: After write try merge bh.
authorJianpeng Ma <jianpeng.ma@intel.com>
Mon, 2 Mar 2015 03:23:44 +0000 (11:23 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Mon, 9 Mar 2015 05:43:41 +0000 (13:43 +0800)
Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
src/osdc/ObjectCacher.cc

index 0935fae16d22610793481b7d32f00b2abadfa19e..c33e9588d5ac302f6a923003722203b5aad51187 100644 (file)
@@ -886,6 +886,7 @@ void ObjectCacher::bh_write_commit(int64_t poolid, sobject_t oid, loff_t start,
       }
     }
 
+    list <BufferHead*> hit;
     // apply to bh's!
     for (map<loff_t, BufferHead*>::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<BufferHead*>::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;