]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
common/mempool: copies bufferlist assignment to mempool through rebuild 35584/head
authorAdam Kupczyk <akupczyk@redhat.com>
Tue, 16 Jun 2020 07:36:55 +0000 (09:36 +0200)
committerAdam Kupczyk <akupczyk@redhat.com>
Tue, 16 Jun 2020 08:03:39 +0000 (10:03 +0200)
Fixes: https://tracker.ceph.com/issues/46027
Signed-off-by: Adam Kupczyk <akupczyk@redhat.com>
src/common/buffer.cc
src/test/test_mempool.cc

index 15ecd9626e0b4839fcab2cd132384743b2ec69e0..886dd22224cd925f0dc1009ea96877351fb924c5 100644 (file)
@@ -1175,6 +1175,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 ed2431368f1c3fd5dde9070ece29f6a93dc1062b..f4c2abb7d3b0b71bbddd9331fcbc6a9f1832a0b6 100644 (file)
@@ -366,6 +366,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, btree_map_test)
 {
   typedef mempool::pool_allocator<mempool::mempool_osd,