assert(r >= 0);
bluefs_extents.erase(offset, length);
-
- alloc->release(offset, length);
+ bluefs_extents_reclaiming.insert(offset, length);
reclaim -= length;
}
if (!bluefs_gift_extents.empty()) {
_commit_bluefs_freespace(bluefs_gift_extents);
}
+ for (auto p = bluefs_extents_reclaiming.begin();
+ p != bluefs_extents_reclaiming.end();
+ ++p) {
+ dout(20) << __func__ << " releasing old bluefs 0x" << std::hex
+ << p.get_start() << "~" << p.get_len() << std::dec
+ << dendl;
+ alloc->release(p.get_start(), p.get_len());
+ }
+ bluefs_extents_reclaiming.clear();
}
l.lock();
Throttle throttle_wal_ops, throttle_wal_bytes; ///< submit to wal complete
interval_set<uint64_t> bluefs_extents; ///< block extents owned by bluefs
+ interval_set<uint64_t> bluefs_extents_reclaiming; ///< currently reclaiming
std::mutex wal_lock;
std::atomic<uint64_t> wal_seq = {0};