From: Matan Breizman Date: Mon, 10 Mar 2025 12:46:04 +0000 (+0000) Subject: crimson/osd/recovery_backend: scan_for_backfill to use seastar::lambda X-Git-Tag: v20.3.0~387^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8ca4fc01b1a59f7d8243dcf2b5b083e567f6fe6a;p=ceph.git crimson/osd/recovery_backend: scan_for_backfill to use seastar::lambda We could also use here seastar::coroutine::parallel_for_each. However, an `interruptible` overload must be used. Instead, use the coroutine which wrapper is simpler this time. ``` kernel callstack: #0 0x56f6e7a in seastar::lw_shared_ptr, std::allocator > > >::operator->() const /home/matan/ceph/src/seastar/include/seastar/core/shared_ptr.hh:347 #1 0x56f6e7a in operator() /home/matan/ceph/src/crimson/osd/recovery_backend.cc:245 #2 0x5286c62 in std::__n4861::coroutine_handle, void, void> >::resume() const /opt/rh/gcc-toolset-13/root/usr/include/c++/13/coroutine:24 SUMMARY: AddressSanitizer: stack-use-after-return /home/matan/ceph/src/seastar/include/seastar/core/shared_ptr.hh:347 in seastar::lw_shared_ptr, std::allocator > ``` Signed-off-by: Matan Breizman --- diff --git a/src/crimson/osd/recovery_backend.cc b/src/crimson/osd/recovery_backend.cc index 2d5ab2b89ae3..892419eeb946 100644 --- a/src/crimson/osd/recovery_backend.cc +++ b/src/crimson/osd/recovery_backend.cc @@ -230,7 +230,7 @@ RecoveryBackend::scan_for_backfill( DEBUGDPP("starting from {}", pg, start); auto version_map = seastar::make_lw_shared>(); auto&& [objects, next] = co_await backend->list_objects(start, max); - co_await interruptor::parallel_for_each(objects, [FNAME, this, version_map] + co_await interruptor::parallel_for_each(objects, seastar::coroutine::lambda([FNAME, this, version_map] (const hobject_t& object) -> interruptible_future<> { DEBUGDPP("querying obj:{}", pg, object); auto obc_manager = pg.obc_loader.get_obc_manager(object); @@ -252,7 +252,7 @@ RecoveryBackend::scan_for_backfill( // for the first item in the range, which is usually last_backfill. co_return; } - }); + })); BackfillInterval bi; bi.begin = std::move(start); bi.end = std::move(next);