diff --git a/src/crimson/os/seastore/transaction_manager.h b/src/crimson/os/seastore/transaction_manager.h index 5a4cdb702e5..9f398c8a400 100644 --- a/src/crimson/os/seastore/transaction_manager.h +++ b/src/crimson/os/seastore/transaction_manager.h @@ -214,6 +214,28 @@ public: }); } + /** + * read_extent + * + * Read extent of type T at offset + */ + template + read_extent_ret read_extent( + Transaction &t, + laddr_t offset) { + LOG_PREFIX(TransactionManager::read_extent); + return get_pin( + t, offset + ).safe_then([this, FNAME, &t, offset] (auto pin) { + if (!pin->get_paddr().is_real()) { + ERRORT("offset {} got wrong pin {}", + t, offset, *pin); + ceph_assert(0 == "Should be impossible"); + } + return this->pin_to_extent(t, std::move(pin)); + }); + } + /// Obtain mutable copy of extent LogicalCachedExtentRef get_mutable_extent(Transaction &t, LogicalCachedExtentRef ref) { LOG_PREFIX(TransactionManager::get_mutable_extent);