From: Jianpeng Ma Date: Mon, 25 Apr 2016 21:59:25 +0000 (+0800) Subject: os/bluestore/BlueStore: Record released extents into wal-transaction. X-Git-Tag: v11.0.0~717^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c23b45d873b0de63f332dbf90d00d6e469865f2b;p=ceph.git os/bluestore/BlueStore: Record released extents into wal-transaction. 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 --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 33750ed055a2..2195d095dbbf 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -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::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::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()); } }