]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osdc: After write try merge bh. 11545/head
authorJianpeng Ma <jianpeng.ma@intel.com>
Fri, 21 Oct 2016 13:47:55 +0000 (21:47 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Fri, 21 Oct 2016 13:47:55 +0000 (21:47 +0800)
Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
src/osdc/ObjectCacher.cc

index bdaf0f806a9aa46190bca571450dfba4af8b2afe..3c350bd1e5f894d4452129bc60ce4b115dd3280c 100644 (file)
@@ -1114,6 +1114,7 @@ void ObjectCacher::bh_write_commit(int64_t poolid, sobject_t oid,
       }
     }
 
+    vector<pair<loff_t, BufferHead*>> hit;
     // apply to bh's!
     for (map<loff_t, BufferHead*>::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.