From: Aravind Ramesh Date: Mon, 15 May 2023 09:22:13 +0000 (+0200) Subject: crimson/os/seastore: fix ceph_assert in segment_manager.h X-Git-Tag: v18.2.1~180^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=11cde098be539070230d858a54cb5449cdd21884;p=ceph-ci.git crimson/os/seastore: fix ceph_assert in segment_manager.h Assert is seen when crimson-osd is compiled with -DWITH_ZNS=ON and crimson-osd is started with a regular SSD. ceph/src/crimson/os/seastore/segment_manager.h:77 : In function 'void crimson::os::seastore::block_sm_superblock_t::validate() const', ceph_assert(%s) get_default_backend_of_device(config.spec.dtype) == backend_type_t::SEGMENTED The device type "dtype" is not getting propogated properly to BlockSegmentManager instantiation causing the assert at a later point. Signed-off-by: Aravind Ramesh (cherry picked from commit cb73d3a9b7a3d6ff5b44e9fd1285aadf7ae787d7) --- diff --git a/src/crimson/os/seastore/segment_manager.cc b/src/crimson/os/seastore/segment_manager.cc index 098a9b068f8..de0bd5d28f2 100644 --- a/src/crimson/os/seastore/segment_manager.cc +++ b/src/crimson/os/seastore/segment_manager.cc @@ -63,18 +63,26 @@ SegmentManager::get_segment_manager( LOG_PREFIX(SegmentManager::get_segment_manager); return seastar::do_with( static_cast(0), - [&](auto &nr_zones) { + [FNAME, + dtype, + device](auto &nr_zones) { return seastar::open_file_dma( device + "/block", seastar::open_flags::rw - ).then([&](auto file) { + ).then([FNAME, + dtype, + device, + &nr_zones](auto file) { return seastar::do_with( file, - [=, &nr_zones](auto &f) -> seastar::future { + [&nr_zones](auto &f) -> seastar::future { ceph_assert(f); return f.ioctl(BLKGETNRZONES, (void *)&nr_zones); }); - }).then([&](auto ret) -> crimson::os::seastore::SegmentManagerRef { + }).then([FNAME, + dtype, + device, + &nr_zones](auto ret) -> crimson::os::seastore::SegmentManagerRef { crimson::os::seastore::SegmentManagerRef sm; INFO("Found {} zones.", nr_zones); if (nr_zones != 0) {