From: Samuel Just Date: Tue, 30 Sep 2025 18:04:55 +0000 (-0700) Subject: crimson/.../btree_lba_manager: convert update_mapping to coroutine X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d19eb7b6522d54fd7856e99e3fa1dcf86ae12bcb;p=ceph-ci.git crimson/.../btree_lba_manager: convert update_mapping to coroutine Signed-off-by: Samuel Just --- diff --git a/src/crimson/os/seastore/lba/btree_lba_manager.cc b/src/crimson/os/seastore/lba/btree_lba_manager.cc index 2acd5fddb18..076c8283d93 100644 --- a/src/crimson/os/seastore/lba/btree_lba_manager.cc +++ b/src/crimson/os/seastore/lba/btree_lba_manager.cc @@ -892,41 +892,34 @@ BtreeLBAManager::update_mapping( assert(!addr.is_null()); assert(mapping.is_viewable()); assert(!mapping.is_indirect()); - return seastar::do_with( - std::move(mapping), - [&t, this, prev_len, prev_addr, len, FNAME, - laddr, addr, checksum, &nextent](auto &mapping) { - auto &cursor = mapping.get_effective_cursor(); - return _update_mapping( - t, - cursor, - [prev_addr, addr, prev_len, len, checksum]( - const lba_map_val_t &in) { - assert(!addr.is_null()); - lba_map_val_t ret = in; - ceph_assert(in.pladdr.is_paddr()); - ceph_assert(in.pladdr.get_paddr() == prev_addr); - ceph_assert(in.len == prev_len); - ret.pladdr = addr; - ret.len = len; - ret.checksum = checksum; - return ret; - }, - &nextent - ).si_then([&t, laddr, prev_addr, prev_len, addr, len, checksum, FNAME](auto res) { - assert(res.is_alive_mapping()); - DEBUGT("laddr={}, paddr {}~0x{:x} => {}~0x{:x}, crc=0x{:x} done -- {}", - t, laddr, prev_addr, prev_len, addr, len, checksum, res.get_cursor()); - return update_mapping_iertr::make_ready_future< - extent_ref_count_t>(res.get_cursor().get_refcount()); - }, - update_mapping_iertr::pass_further{}, - /* ENOENT in particular should be impossible */ - crimson::ct_error::assert_all{ - "Invalid error in BtreeLBAManager::update_mapping" - } - ); - }); + auto &cursor = mapping.get_effective_cursor(); + auto res = co_await _update_mapping( + t, + cursor, + [prev_addr, addr, prev_len, len, checksum]( + const lba_map_val_t &in) { + assert(!addr.is_null()); + lba_map_val_t ret = in; + ceph_assert(in.pladdr.is_paddr()); + ceph_assert(in.pladdr.get_paddr() == prev_addr); + ceph_assert(in.len == prev_len); + ret.pladdr = addr; + ret.len = len; + ret.checksum = checksum; + return ret; + }, + &nextent + ).handle_error_interruptible( + update_mapping_iertr::pass_further{}, + /* ENOENT in particular should be impossible */ + crimson::ct_error::assert_all{ + "Invalid error in BtreeLBAManager::update_mapping" + } + ); + assert(res.is_alive_mapping()); + DEBUGT("laddr={}, paddr {}~0x{:x} => {}~0x{:x}, crc=0x{:x} done -- {}", + t, laddr, prev_addr, prev_len, addr, len, checksum, res.get_cursor()); + co_return res.get_cursor().get_refcount(); } BtreeLBAManager::update_mappings_ret