nb = buffer::create_page_aligned(_len);
else
nb = buffer::create(_len);
+ rebuild(nb);
+ }
+
+ void buffer::list::rebuild(ptr& nb)
+ {
unsigned pos = 0;
for (std::list<ptr>::iterator it = _buffers.begin();
it != _buffers.end();
(!p->is_page_aligned() ||
!p->is_n_page_sized() ||
(offset & ~CEPH_PAGE_MASK)));
- unaligned.rebuild();
+ ptr nb(buffer::create_page_aligned(_len));
+ unaligned.rebuild(nb);
_buffers.insert(p, unaligned._buffers.front());
}
}
}
{
bufferlist bl;
- bufferptr ptr(2);
+ bufferptr ptr(buffer::create_page_aligned(2));
ptr.set_offset(1);
ptr.set_length(1);
bl.append(ptr);
EXPECT_FALSE(bl.is_page_aligned());
bl.rebuild_page_aligned();
- EXPECT_FALSE(bl.is_page_aligned());
+ EXPECT_TRUE(bl.is_page_aligned());
}
{
bufferlist bl;
- bufferptr ptr(CEPH_PAGE_SIZE + 1);
+ bufferptr ptr(buffer::create_page_aligned(CEPH_PAGE_SIZE + 1));
ptr.set_offset(1);
ptr.set_length(CEPH_PAGE_SIZE);
bl.append(ptr);
TEST(BufferList, rebuild) {
{
bufferlist bl;
- bufferptr ptr(2);
+ bufferptr ptr(buffer::create_page_aligned(2));
ptr.set_offset(1);
ptr.set_length(1);
bl.append(ptr);
{
bufferlist bl;
{
- bufferptr ptr(CEPH_PAGE_SIZE + 1);
+ bufferptr ptr(buffer::create_page_aligned(CEPH_PAGE_SIZE + 1));
ptr.set_offset(1);
ptr.set_length(CEPH_PAGE_SIZE);
bl.append(ptr);
bufferlist bl;
{
bufferptr ptr(buffer::create_page_aligned(CEPH_PAGE_SIZE));
+ EXPECT_TRUE(ptr.is_page_aligned());
+ EXPECT_TRUE(ptr.is_n_page_sized());
bl.append(ptr);
}
{
- bufferptr ptr(CEPH_PAGE_SIZE + 1);
+ bufferptr ptr(buffer::create_page_aligned(CEPH_PAGE_SIZE + 1));
+ EXPECT_TRUE(ptr.is_page_aligned());
+ EXPECT_FALSE(ptr.is_n_page_sized());
bl.append(ptr);
}
{
- bufferptr ptr(2);
+ bufferptr ptr(buffer::create_page_aligned(2));
ptr.set_offset(1);
ptr.set_length(1);
+ EXPECT_FALSE(ptr.is_page_aligned());
+ EXPECT_FALSE(ptr.is_n_page_sized());
bl.append(ptr);
}
{
- bufferptr ptr(CEPH_PAGE_SIZE - 2);
+ bufferptr ptr(buffer::create_page_aligned(CEPH_PAGE_SIZE - 2));
+ EXPECT_TRUE(ptr.is_page_aligned());
+ EXPECT_FALSE(ptr.is_n_page_sized());
bl.append(ptr);
}
{
bufferptr ptr(buffer::create_page_aligned(CEPH_PAGE_SIZE));
+ EXPECT_TRUE(ptr.is_page_aligned());
+ EXPECT_TRUE(ptr.is_n_page_sized());
bl.append(ptr);
}
{
- bufferptr ptr(CEPH_PAGE_SIZE + 1);
+ bufferptr ptr(buffer::create_page_aligned(CEPH_PAGE_SIZE + 1));
ptr.set_offset(1);
ptr.set_length(CEPH_PAGE_SIZE);
+ EXPECT_FALSE(ptr.is_page_aligned());
+ EXPECT_TRUE(ptr.is_n_page_sized());
bl.append(ptr);
}
EXPECT_EQ((unsigned)6, bl.buffers().size());
}
}
-// Local Variables:
-// compile-command: "cd .. ; make unittest_bufferlist ; ulimit -s unlimited ; CEPH_BUFFER_TRACK=true valgrind --max-stackframe=20000000 --tool=memcheck ./unittest_bufferlist # --gtest_filter=BufferList.constructors"
-// End:
+/*
+ * Local Variables:
+ * compile-command: "cd .. ; make unittest_bufferlist &&
+ * ulimit -s unlimited ; CEPH_BUFFER_TRACK=true valgrind \
+ * --max-stackframe=20000000 --tool=memcheck \
+ * ./unittest_bufferlist # --gtest_filter=BufferList.constructors"
+ * End:
+ */
+