extent_len_t load_length)
{
assert(ext.get_paddr().is_absolute());
+ if (ext.is_shadow_extent()) {
+ return;
+ }
if (hint == CACHE_HINT_NOCACHE && is_logical_type(ext.get_type())) {
return;
}
last_touch_end = touch_end;
}
+ bool is_shadow_extent() const {
+ return is_shadow;
+ }
+
+ void set_shadow_extent(bool b) {
+ is_shadow = b;
+ }
+
private:
template <typename T>
friend class read_set_item_t;
void new_committer(Transaction &t);
+ bool is_shadow = false;
+
protected:
trans_view_set_t mutation_pending_extents;
trans_view_set_t retired_transactions;
}
virtual ~LogicalChildNode() {
- if (this->is_stable()) {
+ if (this->is_stable() && !is_shadow_extent()) {
lba_child_node_t::destroy();
}
}
0,
orig_ext->get_length(),
std::nullopt);
- boost::ignore_unused(remapped_cold_extent);
+ remapped_cold_extent->set_shadow_extent(true);
remapped_cold_extent->set_shadow_extent(true);
}
remap_offset,
remap_len,
std::nullopt);
- boost::ignore_unused(cold_ext);
+ cold_ext->set_shadow_extent(true);
}
// user must initialize the logical extent themselves.
remapped_extent->set_seen_by_users();