From 6cd6a513ca9a2f34f233086080df1fb2138f1a51 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 8 May 2017 14:50:43 -0400 Subject: [PATCH] buffer: fix mempool accounting for claimed chars These are allocated by the caller, outside of the mempool; do not deallocate via the mempool. Signed-off-by: Sage Weil --- src/common/buffer.cc | 23 ++++++++++++++++++++++- src/include/buffer.h | 1 + 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/common/buffer.cc b/src/common/buffer.cc index 50f08f1e5ca15..6910a441bef75 100644 --- a/src/common/buffer.cc +++ b/src/common/buffer.cc @@ -607,6 +607,25 @@ static std::atomic_flag buffer_debug_lock = ATOMIC_FLAG_INIT; } }; + class buffer::raw_claimed_char : public buffer::raw { + public: + MEMPOOL_CLASS_HELPERS(); + + explicit raw_claimed_char(unsigned l, char *b) : raw(b, l) { + inc_total_alloc(len); + bdout << "raw_claimed_char " << this << " alloc " << (void *)data + << " " << l << " " << buffer::get_total_alloc() << bendl; + } + ~raw_claimed_char() override { + dec_total_alloc(len); + bdout << "raw_claimed_char " << this << " free " << (void *)data + << " " << buffer::get_total_alloc() << bendl; + } + raw* clone_empty() override { + return new raw_char(len); + } + }; + class buffer::raw_unshareable : public buffer::raw { public: MEMPOOL_CLASS_HELPERS(); @@ -715,7 +734,7 @@ static std::atomic_flag buffer_debug_lock = ATOMIC_FLAG_INIT; return buffer::create_aligned(len, sizeof(size_t)); } buffer::raw* buffer::claim_char(unsigned len, char *buf) { - return new raw_char(len, buf); + return new raw_claimed_char(len, buf); } buffer::raw* buffer::create_malloc(unsigned len) { return new raw_malloc(len); @@ -2560,6 +2579,8 @@ MEMPOOL_DEFINE_OBJECT_FACTORY(buffer::raw_posix_aligned, MEMPOOL_DEFINE_OBJECT_FACTORY(buffer::raw_pipe, buffer_raw_pipe, buffer_meta); #endif MEMPOOL_DEFINE_OBJECT_FACTORY(buffer::raw_char, buffer_raw_char, buffer_meta); +MEMPOOL_DEFINE_OBJECT_FACTORY(buffer::raw_claimed_char, buffer_raw_claimed_char, + buffer_meta); MEMPOOL_DEFINE_OBJECT_FACTORY(buffer::raw_unshareable, buffer_raw_unshareable, buffer_meta); MEMPOOL_DEFINE_OBJECT_FACTORY(buffer::raw_static, buffer_raw_static, diff --git a/src/include/buffer.h b/src/include/buffer.h index 31705f84c2eea..9a79f1fe6a229 100644 --- a/src/include/buffer.h +++ b/src/include/buffer.h @@ -136,6 +136,7 @@ namespace buffer CEPH_BUFFER_API { class raw_posix_aligned; class raw_hack_aligned; class raw_char; + class raw_claimed_char; class raw_pipe; class raw_unshareable; // diagnostic, unshareable char buffer class raw_combined; -- 2.39.5