_buffers.push_back(nb);
}
-void buffer::list::rebuild_aligned(unsigned align)
-{
- rebuild_aligned_size_and_memory(align, align);
-}
-
-void buffer::list::rebuild_aligned_size_and_memory(unsigned align_size,
- unsigned align_memory)
-{
- std::list<ptr>::iterator p = _buffers.begin();
- while (p != _buffers.end()) {
- // keep anything that's already align and sized aligned
- if (p->is_aligned(align_memory) && p->is_n_align_sized(align_size)) {
- /*cout << " segment " << (void*)p->c_str()
- << " offset " << ((unsigned long)p->c_str() & (align - 1))
- << " length " << p->length()
- << " " << (p->length() & (align - 1)) << " ok" << std::endl;
- */
- ++p;
- continue;
+ void buffer::list::rebuild_aligned(unsigned align)
+ {
+ rebuild_aligned_size_and_memory(align, align);
+ }
+
+ void buffer::list::rebuild_aligned_size_and_memory(unsigned align_size,
+ unsigned align_memory)
+ {
+ std::list<ptr>::iterator p = _buffers.begin();
+ while (p != _buffers.end()) {
+ // keep anything that's already align and sized aligned
+ if (p->is_aligned(align_memory) && p->is_n_align_sized(align_size)) {
+ /*cout << " segment " << (void*)p->c_str()
+ << " offset " << ((unsigned long)p->c_str() & (align - 1))
+ << " length " << p->length()
+ << " " << (p->length() & (align - 1)) << " ok" << std::endl;
+ */
+ ++p;
+ continue;
+ }
+
+ // consolidate unaligned items, until we get something that is sized+aligned
+ list unaligned;
+ unsigned offset = 0;
+ do {
+ /*cout << " segment " << (void*)p->c_str()
+ << " offset " << ((unsigned long)p->c_str() & (align - 1))
+ << " length " << p->length() << " " << (p->length() & (align - 1))
+ << " overall offset " << offset << " " << (offset & (align - 1))
+ << " not ok" << std::endl;
+ */
+ offset += p->length();
+ unaligned.push_back(*p);
+ _buffers.erase(p++);
+ } while (p != _buffers.end() &&
+ (!p->is_aligned(align_memory) ||
+ !p->is_n_align_sized(align_size) ||
+ (offset % align_size)));
+ if (!(unaligned.is_contiguous() && unaligned._buffers.front().is_aligned(align_memory))) {
+ ptr nb(buffer::create_aligned(unaligned._len, align_memory));
+ unaligned.rebuild(nb);
+ _memcopy_count += unaligned._len;
+ }
+ _buffers.insert(p, unaligned._buffers.front());
}
-
- // consolidate unaligned items, until we get something that is sized+aligned
- list unaligned;
- unsigned offset = 0;
- do {
- /*cout << " segment " << (void*)p->c_str()
- << " offset " << ((unsigned long)p->c_str() & (align - 1))
- << " length " << p->length() << " " << (p->length() & (align - 1))
- << " overall offset " << offset << " " << (offset & (align - 1))
- << " not ok" << std::endl;
- */
- offset += p->length();
- unaligned.push_back(*p);
- _buffers.erase(p++);
- } while (p != _buffers.end() &&
- (!p->is_aligned(align_memory) ||
- !p->is_n_align_sized(align_size) ||
- (offset % align_size)));
- if (!(unaligned.is_contiguous() && unaligned._buffers.front().is_aligned(align_memory))) {
- ptr nb(buffer::create_aligned(unaligned._len, align_memory));
- unaligned.rebuild(nb);
- _memcopy_count += unaligned._len;
- }
- _buffers.insert(p, unaligned._buffers.front());
}
-}
-
-void buffer::list::rebuild_page_aligned()
-{
- rebuild_aligned(CEPH_PAGE_SIZE);
-}
+
+ void buffer::list::rebuild_page_aligned()
+ {
+ rebuild_aligned(CEPH_PAGE_SIZE);
+ }
// sort-of-like-assignment-op
void buffer::list::claim(list& bl, unsigned int flags)