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
*
});
}
+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,
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,
});
}
+ 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.