Bug #58005
Updated by Xuehan Xu over 1 year ago
It seems that when "seastar::need_preempt" is true, "crimson::do_for_each" will turn into a long recursive function. And since we are letting crimson-osd to use full disk space, the number of segments can be very large, which can make the program stack overflow by the recursive "crimson::do_for_each". May need to re-implement "crimson::do_for_each/repeat"
<pre>
#4 0x0000000001820560 in FatalSignal::signaled(int, siginfo_t const&) ()
#5 0x00000000018212db in FatalSignal::signal_entry(int, siginfo_t*, void*) ()
#6 <signal handler called>
#7 0x00000000020cfe3b in crimson::os::seastore::segment_manager::block::BlockSegmentManager::read(crimson::os::seastore::paddr_t, unsigned long, ceph::buffer::v15_2_0::ptr&) ()
#8 0x000000000254d533 in crimson::os::seastore::Device::read(crimson::os::seastore::paddr_t, unsigned long) ()
#9 0x00000000025415ae in crimson::os::seastore::SegmentManagerGroup::read_segment_header(crimson::os::seastore::segment_id_t) ()
#10 0x000000000219cbba in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#11 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#12 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#13 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#14 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#15 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#16 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#17 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#18 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#19 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#20 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#21 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#22 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#23 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#24 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#25 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#26 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#27 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#28 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#29 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#30 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#31 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#32 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#33 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#34 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#35 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#36 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#37 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#38 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
#39 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) ()
</pre>