]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore/transaction_manager: expose find_hole
authorSamuel Just <sjust@redhat.com>
Thu, 4 Mar 2021 09:04:22 +0000 (01:04 -0800)
committerSamuel Just <sjust@redhat.com>
Sun, 18 Apr 2021 07:30:42 +0000 (00:30 -0700)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/os/seastore/lba_manager.h
src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc
src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h
src/crimson/os/seastore/transaction_manager.h

index 26646ff0546bddad1096338145ddc670e6285080..864637df1980eceaeb133ecd50454d83630c958f 100644 (file)
@@ -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<laddr_t, extent_len_t>
+    >;
+  virtual find_hole_ret find_hole(
+    Transaction &t,
+    laddr_t hint,
+    extent_len_t) = 0;
+
   /**
    * Allocates a new mapping referenced by LBARef
    *
index aa9fea07904dd708bafd4f888663671c4c475c73..bbbf0a90f1c896939ef2299ff6ecb9cbbb017e17 100644 (file)
@@ -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<std::pair<laddr_t, extent_len_t>>(
+      addr, len);
+  });
+
+}
+
 BtreeLBAManager::alloc_extent_ret
 BtreeLBAManager::alloc_extent(
   Transaction &t,
index 76fa2d1944812ed9cfafe6a528612d6e2dc4ef0d..34fa328095736c357744875c85fa63bccb0414f3 100644 (file)
@@ -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,
index cc62376116265e68f4ce4fa0b401fe29fe272196..d8c31a924d6e5c403ec9623fe4820bc1e94a5696 100644 (file)
@@ -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.