bool buffer::ptr::at_buffer_tail() const { return _off + _len == _raw->len; }
+ int buffer::ptr::get_mempool() const {
+ if (_raw) {
+ return _raw->mempool;
+ }
+ return mempool::mempool_buffer_anon;
+ }
+
void buffer::ptr::reassign_to_mempool(int pool) {
if (_raw) {
_raw->reassign_to_mempool(pool);
{
std::swap(_len, other._len);
std::swap(_memcopy_count, other._memcopy_count);
- std::swap(_mempool, other._mempool);
_buffers.swap(other._buffers);
append_buffer.swap(other.append_buffer);
//last_p.swap(other.last_p);
return is_aligned(CEPH_PAGE_SIZE);
}
+ int buffer::list::get_mempool() const
+ {
+ if (_buffers.empty()) {
+ return mempool::mempool_buffer_anon;
+ }
+ return _buffers.back().get_mempool();
+ }
+
void buffer::list::reassign_to_mempool(int pool)
{
- _mempool = pool;
if (append_buffer.get_raw()) {
append_buffer.get_raw()->reassign_to_mempool(pool);
}
void buffer::list::try_assign_to_mempool(int pool)
{
- _mempool = pool;
if (append_buffer.get_raw()) {
append_buffer.get_raw()->try_assign_to_mempool(pool);
}
void buffer::list::reserve(size_t prealloc)
{
if (append_buffer.unused_tail_length() < prealloc) {
- append_buffer = buffer::create(prealloc);
- if (_mempool >= 0) {
- append_buffer.get_raw()->reassign_to_mempool(_mempool);
- }
+ append_buffer = buffer::create_in_mempool(prealloc, get_mempool());
append_buffer.set_length(0); // unused, so far.
}
}
unsigned gap = append_buffer.unused_tail_length();
if (!gap) {
// make a new append_buffer!
- append_buffer = raw_combined::create(CEPH_BUFFER_APPEND_SIZE);
+ append_buffer = raw_combined::create(CEPH_BUFFER_APPEND_SIZE, 0,
+ get_mempool());
append_buffer.set_length(0); // unused, so far.
- if (_mempool >= 0) {
- append_buffer.get_raw()->reassign_to_mempool(_mempool);
- }
}
append(append_buffer, append_buffer.append(c) - 1, 1); // add segment to the list
}
size_t need = ROUND_UP_TO(len, sizeof(size_t)) + sizeof(raw_combined);
size_t alen = ROUND_UP_TO(need, CEPH_BUFFER_ALLOC_UNIT) -
sizeof(raw_combined);
- append_buffer = raw_combined::create(alen, 0);
+ append_buffer = raw_combined::create(alen, 0, get_mempool());
append_buffer.set_length(0); // unused, so far.
- if (_mempool >= 0) {
- append_buffer.get_raw()->reassign_to_mempool(_mempool);
- }
}
}
return have_raw() && (start() > 0 || end() < raw_length());
}
+ int get_mempool() const;
void reassign_to_mempool(int pool);
void try_assign_to_mempool(int pool);
unsigned _len;
unsigned _memcopy_count; //the total of memcopy using rebuild().
ptr append_buffer; // where i put small appends.
- int _mempool = -1;
public:
class iterator;
_memcopy_count = other._memcopy_count;
last_p = begin();
append_buffer.swap(other.append_buffer);
- _mempool = other._mempool;
other.clear();
return *this;
}
const ptr& front() const { return _buffers.front(); }
const ptr& back() const { return _buffers.back(); }
+ int get_mempool() const;
void reassign_to_mempool(int pool);
void try_assign_to_mempool(int pool);