// deepcopy the buffer of exist clean extent beacuse it shares
// buffer with original clean extent.
auto bp = i->get_bptr();
- auto nbp = ceph::bufferptr(bp.c_str(), bp.length());
+ auto nbp = ceph::bufferptr(buffer::create_page_aligned(bp.length()));
+ bp.copy_out(0, bp.length(), nbp.c_str());
i->set_bptr(std::move(nbp));
t.add_mutated_extent(i);
// shallow copy the buffer from original extent
auto remap_offset = remap_laddr.get_byte_distance<
extent_len_t>(original_laddr);
- auto nbp = ceph::bufferptr(*original_bptr, remap_offset, remap_length);
+
+ auto nbp = ceph::bufferptr(buffer::create_page_aligned(remap_length));
+ original_bptr->copy_out(remap_offset, remap_length, nbp.c_str());
+
// ExtentPlacementManager::alloc_new_extent will make a new
// (relative/temp) paddr, so make extent directly
ext = CachedExtent::make_cached_extent_ref<T>(std::move(nbp));