From afb43b1641d0f4f218cfd76b2e2970b9dc60c95f Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Thu, 4 Mar 2021 01:04:22 -0800 Subject: [PATCH] crimson/os/seastore/transaction_manager: expose find_hole Signed-off-by: Samuel Just --- src/crimson/os/seastore/lba_manager.h | 12 +++++++++++ .../lba_manager/btree/btree_lba_manager.cc | 20 +++++++++++++++++++ .../lba_manager/btree/btree_lba_manager.h | 5 +++++ src/crimson/os/seastore/transaction_manager.h | 12 +++++++++++ 4 files changed, 49 insertions(+) diff --git a/src/crimson/os/seastore/lba_manager.h b/src/crimson/os/seastore/lba_manager.h index 26646ff0546bd..864637df1980e 100644 --- a/src/crimson/os/seastore/lba_manager.h +++ b/src/crimson/os/seastore/lba_manager.h @@ -59,6 +59,18 @@ public: Transaction &t, laddr_list_t &&extent_lisk) = 0; + /** + * Finds unmapped laddr extent of len len + */ + using find_hole_ertr = base_ertr; + using find_hole_ret = find_hole_ertr::future< + std::pair + >; + virtual find_hole_ret find_hole( + Transaction &t, + laddr_t hint, + extent_len_t) = 0; + /** * Allocates a new mapping referenced by LBARef * diff --git a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc index aa9fea07904dd..bbbf0a90f1c89 100644 --- a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc +++ b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc @@ -102,6 +102,26 @@ BtreeLBAManager::get_mappings( }); } +BtreeLBAManager::find_hole_ret +BtreeLBAManager::find_hole( + Transaction &t, + laddr_t hint, + extent_len_t len) +{ + return get_root(t + ).safe_then([this, hint, len, &t](auto extent) { + return extent->find_hole( + get_context(t), + hint, + L_ADDR_MAX, + len); + }).safe_then([len](auto addr) { + return seastar::make_ready_future>( + addr, len); + }); + +} + BtreeLBAManager::alloc_extent_ret BtreeLBAManager::alloc_extent( Transaction &t, diff --git a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h index 76fa2d1944812..34fa328095736 100644 --- a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h +++ b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h @@ -58,6 +58,11 @@ public: Transaction &t, laddr_list_t &&list) final; + find_hole_ret find_hole( + Transaction &t, + laddr_t hint, + extent_len_t) final; + alloc_extent_ret alloc_extent( Transaction &t, laddr_t hint, diff --git a/src/crimson/os/seastore/transaction_manager.h b/src/crimson/os/seastore/transaction_manager.h index cc62376116265..d8c31a924d6e5 100644 --- a/src/crimson/os/seastore/transaction_manager.h +++ b/src/crimson/os/seastore/transaction_manager.h @@ -267,6 +267,18 @@ public: }); } + using find_hole_ertr = LBAManager::find_hole_ertr; + using find_hole_ret = LBAManager::find_hole_ret; + find_hole_ret find_hole( + Transaction &t, + laddr_t hint, + extent_len_t len) { + return lba_manager->find_hole( + t, + hint, + len); + } + /* alloc_extents * * allocates more than one new blocks of type T. -- 2.39.5