@@ -197,7 +197,7 @@ BtreeLBAManager::_get_original_mappings(
197197 pin->get_key (), pin->get_length (),
198198 pin->get_raw_val ().get_laddr ());
199199 auto &btree_new_pin = static_cast <BtreeLBAMapping&>(*new_pin);
200- btree_new_pin.set_key_for_indirect (
200+ btree_new_pin.make_indirect (
201201 pin->get_key (),
202202 pin->get_length (),
203203 pin->get_raw_val ().get_laddr ());
@@ -287,7 +287,7 @@ BtreeLBAManager::_get_mapping(
287287 c.trans , pin->get_raw_val ().get_laddr ()
288288 ).si_then ([&pin](auto new_pin) {
289289 ceph_assert (pin->get_length () == new_pin->get_length ());
290- new_pin->set_key_for_indirect (
290+ new_pin->make_indirect (
291291 pin->get_key (),
292292 pin->get_length ());
293293 return new_pin;
@@ -307,7 +307,6 @@ BtreeLBAManager::_alloc_extent(
307307 extent_len_t len,
308308 pladdr_t addr,
309309 paddr_t actual_addr,
310- laddr_t intermediate_base,
311310 LogicalCachedExtent* nextent)
312311{
313312 struct state_t {
@@ -321,6 +320,8 @@ BtreeLBAManager::_alloc_extent(
321320
322321 LOG_PREFIX (BtreeLBAManager::_alloc_extent);
323322 TRACET (" {}~{}, hint={}" , t, addr, len, hint);
323+
324+ ceph_assert (actual_addr != P_ADDR_NULL ? addr.is_laddr () : addr.is_paddr ());
324325 auto c = get_context (t);
325326 ++stats.num_alloc_extents ;
326327 auto lookup_attempts = stats.num_alloc_extents_iter_nexts ;
@@ -384,17 +385,9 @@ BtreeLBAManager::_alloc_extent(
384385 state.ret = iter;
385386 });
386387 });
387- }).si_then ([c, actual_addr, addr, intermediate_base](auto &&state) {
388- auto ret_pin = state.ret ->get_pin (c);
389- if (actual_addr != P_ADDR_NULL) {
390- ceph_assert (addr.is_laddr ());
391- ret_pin->set_paddr (actual_addr);
392- ret_pin->set_intermediate_base (intermediate_base);
393- } else {
394- ceph_assert (addr.is_paddr ());
395- }
396- return alloc_extent_iertr::make_ready_future<LBAMappingRef>(
397- std::move (ret_pin));
388+ }).si_then ([c](auto &&state) {
389+ return alloc_extent_iertr::make_ready_future<
390+ LBAMappingRef>(state.ret ->get_pin (c));
398391 });
399392}
400393
@@ -496,7 +489,9 @@ BtreeLBAManager::scan_mappings(
496489 seastar::stop_iteration::yes);
497490 }
498491 ceph_assert ((pos.get_key () + pos.get_val ().len ) > begin);
499- f (pos.get_key (), pos.get_val ().pladdr .get_paddr (), pos.get_val ().len );
492+ if (pos.get_val ().pladdr .is_paddr ()) {
493+ f (pos.get_key (), pos.get_val ().pladdr .get_paddr (), pos.get_val ().len );
494+ }
500495 return LBABtree::iterate_repeat_ret_inner (
501496 interruptible::ready_future_marker{},
502497 seastar::stop_iteration::no);
@@ -554,7 +549,8 @@ BtreeLBAManager::update_mapping(
554549 return ret;
555550 },
556551 nextent
557- ).si_then ([&t, laddr, prev_addr, addr, FNAME](auto result) {
552+ ).si_then ([&t, laddr, prev_addr, addr, FNAME](auto p) {
553+ auto &result = p.first ;
558554 DEBUGT (" laddr={}, paddr {} => {} done -- {}" ,
559555 t, laddr, prev_addr, addr, result);
560556 },
@@ -685,7 +681,9 @@ BtreeLBAManager::update_refcount(
685681 return out;
686682 },
687683 nullptr
688- ).si_then ([&t, addr, delta, FNAME, this , cascade_remove](auto result) {
684+ ).si_then ([&t, addr, delta, FNAME, this , cascade_remove](auto p) {
685+ auto &result = p.first ;
686+ auto &mapping = p.second ;
689687 DEBUGT (" laddr={}, delta={} done -- {}" , t, addr, delta, result);
690688 auto fut = ref_iertr::make_ready_future<
691689 std::optional<std::pair<paddr_t , extent_len_t >>>();
@@ -696,19 +694,23 @@ BtreeLBAManager::update_refcount(
696694 result.len
697695 );
698696 }
699- return fut.si_then ([result](auto removed) {
697+ return fut.si_then ([result, mapping=std::move (mapping)]
698+ (auto removed) mutable {
700699 if (result.pladdr .is_laddr ()
701700 && removed) {
702- return ref_update_result_t {
703- result.refcount ,
704- removed->first ,
705- removed->second };
701+ return std::make_pair (
702+ ref_update_result_t {
703+ result.refcount ,
704+ removed->first ,
705+ removed->second },
706+ std::move (mapping));
706707 } else {
707- return ref_update_result_t {
708- result.refcount ,
709- result.pladdr ,
710- result.len
711- };
708+ return std::make_pair (
709+ ref_update_result_t {
710+ result.refcount ,
711+ result.pladdr ,
712+ result.len },
713+ std::move (mapping));
712714 }
713715 });
714716 });
@@ -722,7 +724,7 @@ BtreeLBAManager::_update_mapping(
722724 LogicalCachedExtent* nextent)
723725{
724726 auto c = get_context (t);
725- return with_btree_ret<LBABtree, lba_map_val_t >(
727+ return with_btree_ret<LBABtree, _update_mapping_ret_bare >(
726728 cache,
727729 c,
728730 [f=std::move (f), c, addr, nextent](auto &btree) mutable {
@@ -742,16 +744,18 @@ BtreeLBAManager::_update_mapping(
742744 c,
743745 iter
744746 ).si_then ([ret] {
745- return ret;
747+ return std::make_pair (
748+ std::move (ret), BtreeLBAMappingRef (nullptr ));
746749 });
747750 } else {
748751 return btree.update (
749752 c,
750753 iter,
751754 ret,
752755 nextent
753- ).si_then ([ret](auto ) {
754- return ret;
756+ ).si_then ([c, ret](auto iter) {
757+ return std::make_pair (
758+ std::move (ret), iter.get_pin (c));
755759 });
756760 }
757761 });
0 commit comments