]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
seastore: add rbm alloc infos when alloc_extent() is called
authormyoungwon oh <myoungwon.oh@samsung.com>
Fri, 13 Aug 2021 04:42:52 +0000 (13:42 +0900)
committermyoungwon oh <ohmyoungwon@gmail.com>
Sat, 23 Oct 2021 15:05:08 +0000 (00:05 +0900)
Signed-off-by: Myoungwon Oh <myoungwon.oh@samsung.com>
src/crimson/os/seastore/random_block_manager.h
src/crimson/os/seastore/random_block_manager/nvme_manager.cc
src/crimson/os/seastore/random_block_manager/nvme_manager.h

index 5208c01abd1262387217def356c2b1e82a1e830a..2c2150c2a88f7533c8bdba8135fb96347208ac1b 100644 (file)
@@ -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<paddr_t>;
+  // 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,
index 6f9c89b429e5d41f13b974c78d251f375d5d756a..0a2cca569aa32dc30515024463795d260e72b9fa 100644 (file)
@@ -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<paddr_t> {
        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{},
index 9842db2114b38bd4296f738a9f509070b05b2d21..ad282691261df6f37c4d93125bf1cd01e10176b9 100644 (file)
@@ -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
 
   /*