Signed-off-by: Sage Weil <sage@redhat.com>
p->blob == n->blob &&
p->blob_offset + p->length == n->blob_offset) {
p->length += n->length;
- extent_map.erase(n++);
+ rm(n++);
++removed;
}
if (n == extent_map.end()) {
// deref whole lextent
old_extents->insert(*new Extent(p->logical_offset, p->blob_offset,
p->length, p->blob));
- extent_map.erase(p++);
+ rm(p++);
continue;
}
// deref head
p->length - keep, p->blob));
extent_map.insert(*new Extent(end, p->blob_offset + p->length - keep, keep,
p->blob));
- extent_map.erase(p);
+ rm(p);
break;
}
}
/// seek to the first lextent including or after offset
extent_map_t::iterator seek_lextent(uint64_t offset);
+ /// remove (and delete) an Extent
+ void rm(extent_map_t::iterator p) {
+ Extent *e = &*p;
+ extent_map.erase(p);
+ delete e;
+ }
+
bool has_any_lextents(uint64_t offset, uint64_t length);
/// consolidate adjacent lextents in extent_map