void BlueStore::_txc_release_alloc(TransContext *txc)
{
- // update allocator with full released set
+ interval_set<uint64_t> bulk_release_extents;
+ // it's expected we're called with lazy_release_lock already taken!
if (!cct->_conf->bluestore_debug_no_reuse_blocks) {
dout(10) << __func__ << " " << txc << " " << std::hex
<< txc->released << std::dec << dendl;
- alloc->release(txc->released);
+ // interval_set seems to be too costly for inserting things in
+ // bstore_kv_final. We could serialize in simpler format and perform
+ // the merge separately, maybe even in a dedicated thread.
+ bulk_release_extents.insert(txc->released);
}
+ alloc->release(bulk_release_extents);
txc->allocated.clear();
txc->released.clear();
}