void BlueStore::LRUCache::trim(uint64_t onode_max, uint64_t buffer_max)
{
- std::lock_guard<std::mutex> l(lock);
+ std::lock_guard<std::recursive_mutex> l(lock);
dout(20) << __func__ << " onodes " << onode_lru.size() << " / " << onode_max
<< " buffers " << buffer_size << " / " << buffer_max
void BlueStore::TwoQCache::trim(uint64_t onode_max, uint64_t buffer_max)
{
- std::lock_guard<std::mutex> l(lock);
+ std::lock_guard<std::recursive_mutex> l(lock);
dout(20) << __func__ << " onodes " << onode_lru.size() << " / " << onode_max
<< " buffers " << buffer_bytes << " / " << buffer_max
BlueStore::ready_regions_t& res,
interval_set<uint64_t>& res_intervals)
{
- std::lock_guard<std::mutex> l(cache->lock);
+ std::lock_guard<std::recursive_mutex> l(cache->lock);
res.clear();
res_intervals.clear();
uint64_t want_bytes = length;
void BlueStore::BufferSpace::finish_write(uint64_t seq)
{
- std::lock_guard<std::mutex> l(cache->lock);
+ std::lock_guard<std::recursive_mutex> l(cache->lock);
auto i = writing_map.begin();
while (i != writing_map.end()) {
void BlueStore::OnodeSpace::add(const ghobject_t& oid, OnodeRef o)
{
- std::lock_guard<std::mutex> l(cache->lock);
+ std::lock_guard<std::recursive_mutex> l(cache->lock);
dout(30) << __func__ << " " << oid << " " << o << dendl;
assert(onode_map.count(oid) == 0);
onode_map[oid] = o;
BlueStore::OnodeRef BlueStore::OnodeSpace::lookup(const ghobject_t& oid)
{
- std::lock_guard<std::mutex> l(cache->lock);
+ std::lock_guard<std::recursive_mutex> l(cache->lock);
dout(30) << __func__ << dendl;
ceph::unordered_map<ghobject_t,OnodeRef>::iterator p = onode_map.find(oid);
if (p == onode_map.end()) {
void BlueStore::OnodeSpace::clear()
{
- std::lock_guard<std::mutex> l(cache->lock);
+ std::lock_guard<std::recursive_mutex> l(cache->lock);
dout(10) << __func__ << dendl;
for (auto &p : onode_map) {
cache->_rm_onode(p.second);
const ghobject_t& new_oid,
const string& new_okey)
{
- std::lock_guard<std::mutex> l(cache->lock);
+ std::lock_guard<std::recursive_mutex> l(cache->lock);
dout(30) << __func__ << " " << old_oid << " -> " << new_oid << dendl;
ceph::unordered_map<ghobject_t,OnodeRef>::iterator po, pn;
po = onode_map.find(old_oid);
bool BlueStore::OnodeSpace::map_any(std::function<bool(OnodeRef)> f)
{
- std::lock_guard<std::mutex> l(cache->lock);
+ std::lock_guard<std::recursive_mutex> l(cache->lock);
dout(20) << __func__ << dendl;
for (auto& i : onode_map) {
if (f(i.second)) {
dout(log_level) << __func__ << " csum: " << std::hex << v << std::dec
<< dendl;
}
- std::lock_guard<std::mutex> l(e.blob->shared_blob->bc.cache->lock);
+ std::lock_guard<std::recursive_mutex> l(e.blob->shared_blob->bc.cache->lock);
if (!e.blob->shared_blob->bc.empty()) {
for (auto& i : e.blob->shared_blob->bc.buffer_map) {
dout(log_level) << __func__ << " 0x" << std::hex << i.first
// return value is the highest cache_private of a trimmed buffer, or 0.
int discard(uint64_t offset, uint64_t length) {
- std::lock_guard<std::mutex> l(cache->lock);
+ std::lock_guard<std::recursive_mutex> l(cache->lock);
return _discard(offset, length);
}
int _discard(uint64_t offset, uint64_t length);
void write(uint64_t seq, uint64_t offset, bufferlist& bl, unsigned flags) {
- std::lock_guard<std::mutex> l(cache->lock);
+ std::lock_guard<std::recursive_mutex> l(cache->lock);
Buffer *b = new Buffer(this, Buffer::STATE_WRITING, seq, offset, bl,
flags);
b->cache_private = _discard(offset, bl.length());
}
void finish_write(uint64_t seq);
void did_read(uint64_t offset, bufferlist& bl) {
- std::lock_guard<std::mutex> l(cache->lock);
+ std::lock_guard<std::recursive_mutex> l(cache->lock);
Buffer *b = new Buffer(this, Buffer::STATE_CLEAN, 0, offset, bl);
b->cache_private = _discard(offset, bl.length());
_add_buffer(b, 1, nullptr);
}
void dump(Formatter *f) const {
- std::lock_guard<std::mutex> l(cache->lock);
+ std::lock_guard<std::recursive_mutex> l(cache->lock);
f->open_array_section("buffers");
for (auto& i : buffer_map) {
f->open_object_section("buffer");
/// a cache (shard) of onodes and buffers
struct Cache {
PerfCounters *logger;
- std::mutex lock; ///< protect lru and other structures
+ std::recursive_mutex lock; ///< protect lru and other structures
static Cache *create(string type, PerfCounters *logger);