]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
common/mempool: copies bufferlist assignment to mempool through rebuild
authorAdam Kupczyk <akupczyk@redhat.com>
Tue, 16 Jun 2020 07:36:55 +0000 (09:36 +0200)
committerNathan Cutler <ncutler@suse.com>
Thu, 25 Feb 2021 16:59:53 +0000 (17:59 +0100)
Fixes: https://tracker.ceph.com/issues/46027
Signed-off-by: Adam Kupczyk <akupczyk@redhat.com>
(cherry picked from commit b3a6d18ea64e0f70e0d3371cbfcd21280677000e)

Conflicts:
src/test/test_mempool.cc
- nautilus version of this file has less tests than master

src/common/buffer.cc
src/test/test_mempool.cc

index 7ff943953056fbc779221526ee7405c03df68672..8caaae907aad29ab050c3a6d5e6e3e703728148e 100644 (file)
@@ -1230,6 +1230,8 @@ static ceph::spinlock debug_lock;
     std::unique_ptr<buffer::ptr_node, buffer::ptr_node::disposer> nb)
   {
     unsigned pos = 0;
+    int mempool = _buffers.front().get_mempool();
+    nb->reassign_to_mempool(mempool);
     for (auto& node : _buffers) {
       nb->copy_in(pos, node.length(), node.c_str(), false);
       pos += node.length();
index 02e99f3fcc19d9345745ad340344cc3744d613c1..39ebc0248bec546d1093189e8544a2d42801d464 100644 (file)
@@ -365,6 +365,21 @@ TEST(mempool, bufferlist_reassign)
   ASSERT_EQ(bytes_before, mempool::osd::allocated_bytes());
 }
 
+TEST(mempool, bufferlist_c_str)
+{
+  bufferlist bl;
+  int len = 1048576;
+  size_t before = mempool::osd::allocated_bytes();
+  bl.append(buffer::create_aligned(len, 4096));
+  bl.append(buffer::create_aligned(len, 4096));
+  bl.reassign_to_mempool(mempool::mempool_osd);
+  size_t after = mempool::osd::allocated_bytes();
+  ASSERT_GE(after, before + len * 2);
+  bl.c_str();
+  size_t after_c_str = mempool::osd::allocated_bytes();
+  ASSERT_EQ(after, after_c_str);
+}
+
 TEST(mempool, check_shard_select)
 {
   const size_t samples = 100;