]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore/BlueStore: Record released extents into wal-transaction. 8742/head
authorJianpeng Ma <jianpeng.ma@intel.com>
Mon, 25 Apr 2016 21:59:25 +0000 (05:59 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Mon, 25 Apr 2016 21:59:25 +0000 (05:59 +0800)
If wal-reply, it release the released-extents. But it don't record those
extents. So if wal_transaction exist, it should record released-extents into
bluestore_wal_transaction_t.

Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
src/os/bluestore/BlueStore.cc

index 33750ed055a24922a537eeed3466a1eb6a1c8e43..2195d095dbbfcddd20e84d544d19d2f9e17ac39c 100644 (file)
@@ -3757,6 +3757,9 @@ int BlueStore::_txc_finalize(OpSequencer *osr, TransContext *txc)
 
   // journal wal items
   if (txc->wal_txn) {
+    txc->wal_txn->released.swap(txc->released);
+    assert(txc->released.empty());
+
     txc->wal_txn->seq = wal_seq.inc();
     bufferlist bl;
     ::encode(*txc->wal_txn, bl);
@@ -3875,20 +3878,15 @@ void BlueStore::_txc_update_fm(TransContext *txc)
     fm->allocate(p.get_start(), p.get_len(), txc->t);
   }
 
-  if (txc->wal_txn) {
-    txc->wal_txn->released.swap(txc->released);
-    assert(txc->released.empty());
-  } else {
-    for (interval_set<uint64_t>::iterator p = txc->released.begin();
-       p != txc->released.end();
-       ++p) {
-      dout(20) << __func__ << " release " << p.get_start()
-       << "~" << p.get_len() << dendl;
-      fm->release(p.get_start(), p.get_len(), txc->t);
+  for (interval_set<uint64_t>::iterator p = txc->released.begin();
+      p != txc->released.end();
+      ++p) {
+    dout(20) << __func__ << " release " << p.get_start()
+      << "~" << p.get_len() << dendl;
+    fm->release(p.get_start(), p.get_len(), txc->t);
 
-      if (!g_conf->bluestore_debug_no_reuse_blocks)
-       alloc->release(p.get_start(), p.get_len());
-    }
+    if (!g_conf->bluestore_debug_no_reuse_blocks)
+      alloc->release(p.get_start(), p.get_len());
   }
 }