});
}
+ ref_ret remove_indirect_mapping_only(
+ Transaction &t,
+ LBAMapping mapping) final {
+ assert(mapping.is_viewable());
+ assert(mapping.is_indirect());
+ return seastar::do_with(
+ std::move(mapping),
+ [&t, this](auto &mapping) {
+ return update_refcount(t, mapping.indirect_cursor.get(), -1
+ ).si_then([](auto res) {
+ return ref_iertr::make_ready_future<
+ ref_update_result_t>(ref_update_result_t{
+ std::move(res), std::nullopt});
+ });
+ });
+ }
+
ref_ret remove_mapping(
Transaction &t,
LBAMapping mapping) final {
Transaction &t,
LBAMapping mapping) = 0;
+ /*
+ * remove_indirect_mapping_only
+ *
+ * Remove the indirect mapping without touch the corresponding
+ * direct one.
+ *
+ * @return returns the information about the removed
+ * indirect mapping.
+ */
+ virtual ref_ret remove_indirect_mapping_only(
+ Transaction &t,
+ LBAMapping mapping) = 0;
+
/**
* Increments ref count on extent
*
});
}
+TransactionManager::ref_iertr::future<LBAMapping>
+TransactionManager::_remove_indirect_mapping_only(
+ Transaction &t,
+ LBAMapping mapping)
+{
+ return lba_manager->remove_indirect_mapping_only(
+ t, std::move(mapping)
+ ).si_then([](auto result) {
+ return std::move(result.result.mapping);
+ });
+}
+
TransactionManager::ref_iertr::future<
TransactionManager::_remove_mapping_result_t>
TransactionManager::_remove_indirect_mapping(
_remove_direct_mapping(
Transaction &t,
LBAMapping mapping);
+ ref_iertr::future<LBAMapping>
+ _remove_indirect_mapping_only(
+ Transaction &t,
+ LBAMapping mapping);
rewrite_extent_ret rewrite_logical_extent(
Transaction& t,