ceph_assert(writing.empty());
}
- void _add_buffer(BufferCacheShard* cache, Buffer *b, int level, Buffer *near) {
+ void _add_buffer(BufferCacheShard* cache, Buffer* b, int level, Buffer* near) {
cache->_audit("_add_buffer start");
buffer_map[b->offset].reset(b);
if (b->is_writing()) {
- b->data.reassign_to_mempool(mempool::mempool_bluestore_writing);
+ // we might get already cached data for which resetting mempool is inppropriate
+ // hence calling try_assign_to_mempool
+ b->data.try_assign_to_mempool(mempool::mempool_bluestore_writing);
if (writing.empty() || writing.rbegin()->seq <= b->seq) {
writing.push_back(*b);
} else {
writing.insert(it, *b);
}
} else {
- b->data.reassign_to_mempool(mempool::mempool_bluestore_cache_data);
- cache->_add(b, level, near);
+ b->data.reassign_to_mempool(mempool::mempool_bluestore_cache_data);
+ cache->_add(b, level, near);
}
cache->_audit("_add_buffer end");
}