blp.copy(length, bl);
// look for an existing mutable blob we can use
- BlobRef b = 0;
- boost::intrusive::set<Extent>::iterator ep =
- o->extent_map.seek_lextent(offset);
+ auto ep = o->extent_map.seek_lextent(offset);
if (ep != o->extent_map.extent_map.begin()) {
--ep;
- b = ep->blob;
- if (ep->logical_offset - ep->blob_offset +
- b->get_blob().get_ondisk_length() <= offset) {
+ if (ep->blob_end() <= offset) {
++ep;
}
}
+ BlobRef b;
while (ep != o->extent_map.extent_map.end()) {
- if (ep->logical_offset >= ep->blob_offset + end) {
+ if (ep->blob_start() >= end) {
break;
}
b = ep->blob;
++ep;
continue;
}
- uint64_t bstart = ep->logical_offset - ep->blob_offset;
+ uint64_t bstart = ep->blob_start();
dout(20) << __func__ << " considering " << *b
<< " bstart 0x" << std::hex << bstart << std::dec << dendl;
}
}
delete &lo;
- if (b->id >= 0 && b->get_ref_map().empty()) {
+ if (b->is_spanning() && b->get_ref_map().empty()) {
dout(20) << __func__ << " spanning_blob_map removing empty " << *b
<< dendl;
auto it = o->extent_map.spanning_blob_map.find(b->id);