]> git-server-git.apps.pok.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)
committerLoic Dachary <ldachary@redhat.com>
Sun, 6 Sep 2015 12:07:54 +0000 (14:07 +0200)
Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
(cherry picked from commit 1a48a8a2b222e41236341cb1241f0885a1b0b9d8)

src/osdc/ObjectCacher.cc

index 5d54ed8a88f9afe23ab2c9f4c1c4fbc8169f93d6..995b37bdc6225d43ee2a1f8c82c437de6d700ef3 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;