From 2089a7745e533fb09c7439607bb5f4cfcbd37ba7 Mon Sep 17 00:00:00 2001 From: myoungwon oh Date: Fri, 13 Aug 2021 13:42:52 +0900 Subject: [PATCH] seastore: add rbm alloc infos when alloc_extent() is called Signed-off-by: Myoungwon Oh --- src/crimson/os/seastore/random_block_manager.h | 4 +++- .../random_block_manager/nvme_manager.cc | 17 ++++++++++++----- .../random_block_manager/nvme_manager.h | 2 +- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/crimson/os/seastore/random_block_manager.h b/src/crimson/os/seastore/random_block_manager.h index 5208c01abd126..2c2150c2a88f7 100644 --- a/src/crimson/os/seastore/random_block_manager.h +++ b/src/crimson/os/seastore/random_block_manager.h @@ -73,7 +73,9 @@ public: crimson::ct_error::invarg, crimson::ct_error::enospc >; - virtual allocate_ertr::future<> alloc_extent(Transaction &t, size_t size) = 0; // allocator, return blocks + using allocate_ret = allocate_ertr::future; + // allocator, return start addr of allocated blocks + virtual allocate_ret alloc_extent(Transaction &t, size_t size) = 0; using abort_allocation_ertr = crimson::errorator< crimson::ct_error::input_output_error, diff --git a/src/crimson/os/seastore/random_block_manager/nvme_manager.cc b/src/crimson/os/seastore/random_block_manager/nvme_manager.cc index 6f9c89b429e5d..0a2cca569aa32 100644 --- a/src/crimson/os/seastore/random_block_manager/nvme_manager.cc +++ b/src/crimson/os/seastore/random_block_manager/nvme_manager.cc @@ -250,7 +250,7 @@ NVMeManager::find_block_ret NVMeManager::find_free_block(Transaction &t, size_t } /* TODO : block allocator */ -NVMeManager::allocate_ertr::future<> NVMeManager::alloc_extent( +NVMeManager::allocate_ret NVMeManager::alloc_extent( Transaction &t, size_t size) { @@ -264,8 +264,8 @@ NVMeManager::allocate_ertr::future<> NVMeManager::alloc_extent( * */ return find_free_block(t, size - ).safe_then([this] (auto alloc_extent) mutable - -> allocate_ertr::future<> { + ).safe_then([this, &t] (auto alloc_extent) mutable + -> allocate_ertr::future { logger().debug("after find_free_block: allocated {}", alloc_extent); if (!alloc_extent.empty()) { rbm_alloc_delta_t alloc_info; @@ -279,11 +279,18 @@ NVMeManager::allocate_ertr::future<> NVMeManager::alloc_extent( alloc_info.alloc_blk_ranges.push_back(std::make_pair(paddr, len)); alloc_info.op = rbm_alloc_delta_t::op_types_t::SET; } - // TODO: add alloc info to delta + t.add_rbm_alloc_info_blocks(alloc_info); } else { return crimson::ct_error::enospc::make(); } - return allocate_ertr::now(); + paddr_t paddr = convert_blk_paddr_to_paddr( + alloc_extent.range_start() * super.block_size, + super.block_size, + super.blocks_per_segment, + 0); + return allocate_ret( + allocate_ertr::ready_future_marker{}, + paddr); } ).handle_error( allocate_ertr::pass_further{}, diff --git a/src/crimson/os/seastore/random_block_manager/nvme_manager.h b/src/crimson/os/seastore/random_block_manager/nvme_manager.h index 9842db2114b38..ad282691261df 100644 --- a/src/crimson/os/seastore/random_block_manager/nvme_manager.h +++ b/src/crimson/os/seastore/random_block_manager/nvme_manager.h @@ -203,7 +203,7 @@ public: * TODO: multiple allocation * */ - allocate_ertr::future<> alloc_extent( + allocate_ret alloc_extent( Transaction &t, size_t size) final; // allocator, return blocks /* -- 2.47.3